今日話すこと
- 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
- WebAPIリクエスト仕様書としてcurlコマンドのご提案
- cURL as DSLとは何だったのか。あるいは細かすぎて伝わらないcURL as DSL。
- curl コマンドを生成するツールの存在
- Google Chrome
- mitmproxy
開発に集中したいので面倒なセットアップはやりたくない
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
おまけ: ヒストグラムにしたい
- https://github.com/winebarrel/hyst
- 入力は整数にする必要があるので awk でよろしくやっておく
$ 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 的なツールだと組み合わせて色々できて楽しい