9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

curl でサッとベンチマークをとる (スライド版)

Posted at
1 / 21

今日話すこと

  • curl でサッとベンチマークできるように Go でツールをいくつか書いたよ!

こんなんのや

$ ntimes 1000 -p 4 -- curlb https://blog.yuyat.jp/ | percentile
50%:    0.077
66%:    0.082
75%:    0.085
80%:    0.087
90%:    0.223
95%:    0.355
98%:    0.404
99%:    0.677
100%:   3.647

こんなのをサッと出す話です

$ ntimes 1000 -p 4 -- curlb https://blog.yuyat.jp/ | awk '{ print $1 * 1000 }' | hyst -w 10
  70    7  ##
  80   52  ###################
  90  129  #################################################
 100  110  #########################################
 110  131  ##################################################
 120  103  #######################################
 130  107  ########################################
 140   95  ####################################
 150   66  #########################
 160   67  #########################
 170   44  ################
 180   23  ########
 190   16  ######
 200   10  ###
 210    5  #
 220    1
 230    4  #
 240    0
 250    3  #
 260    4  #

何故 curl を使うか


専用ツールがあるのになぜ?

  • ab
  • JMeter
  • wrk

共通言語としての curl


開発に集中したいので面倒なセットアップはやりたくない


HTTP リクエストの準備が割と大変

  • 単純な GET なら良いが
  • Authorization
  • User-Agent
  • Cookie

curl でレスポンスタイムを取得する


curl でレスポンスタイムを取得する

  • 今回は Time to First Byte とします (TTFB)
    • 転送時間は含まない
  • まずは curl コマンドを用意する (Chrome とかからコピーする)
  • 末尾に -s -o /dev/null -w '%{time_starttransfer}\n' を追加

とってみた

$ curl https://blog.yuyat.jp/ -s -o /dev/null -w '%{time_starttransfer}\n'
0.123
  • 単位は秒

これも面倒なので

  • ラッパーコマンド curlb にしてみた
#!/bin/sh
curl -s -o /dev/null -w '%{time_starttransfer}\n' "$@"
$ curlb https://blog.yuyat.jp/
0.272

繰り返し実行してみる


繰り返し実行してみる

  • zsh なら repeat コマンドでできる
  • が、直列実行なので時間がかかる
$ repeat 1000 curlb https://blog.yuyat.jp/
0.077
0.069
0.066
0.066
0.061
0.075
0.070
...

並列実行したい!


とにかくコマンドを並列実行するやつを作った

$ ntimes 1000 -p 4 -- curlb https://blog.yuyat.jp/
0.078
0.081
0.077
0.075
0.082
0.084
0.084
...

データをわかりやすく表現したい!


パーセンタイルを出せるやつを作った

$ ntimes 1000 -p 4 -- curlb https://blog.yuyat.jp/ | percentile
50%:    0.077
66%:    0.082
75%:    0.085
80%:    0.087
90%:    0.223
95%:    0.355
98%:    0.404
99%:    0.677
100%:   3.647

おまけ: ヒストグラムにしたい

$ ntimes 1000 -p 4 -- curlb https://blog.yuyat.jp/ | awk '{ print $1 * 1000 }' | hyst -w 10
  70    7  ##
  80   52  ###################
  90  129  #################################################
 100  110  #########################################
 110  131  ##################################################
 120  103  #######################################
 130  107  ########################################
 140   95  ####################################
 150   66  #########################
 160   67  #########################
 170   44  ################
 180   23  ########
 190   16  ######
 200   10  ###
 210    5  #
 220    1
 230    4  #
 240    0
 250    3  #
 260    4  #

まとめ

  • curl-w でいろんな数値を出せて便利
  • curl は共通言語として使うのがオススメ
  • UNIX 的なツールだと組み合わせて色々できて楽しい
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?