アプリケーションのSLOを決めるためにレイテンシの目安を計測したかったのだが、curl で-wオプションを指定すると、レスポンスタイムを計測することができる。
指定できる内容は以下のサイトで紹介されているようにかなり細かいが、ここではレスポンスタイム全体である time_total
だけが欲しいものとする。
Curl で時間計測
curl には -w, –write-out というオプションがあり、HTTP のコードやどのフェーズに何秒かかったかなどを出力することができます。ときどき調査で使うのですが、毎
コマンドの例はこんな感じ。
curl www.google.com -o /dev/null -w '%{time_total}\n' 2>/dev/null
-o を指定すると結果の出力先を指定できる。ここでは、レスポンスタイムさえ見られれば良いので、ダウンロードしたレスポンスのbody 自体は必要ない。なので、/dev/null
を指定して捨てる。
その他、ダウンロード中に途中経過が表示されるが、これも邪魔なので 2 > /dev/null
を指定して捨てる。
-w ではレスポンスタイムの表示形式を指定できる。これも、詳しくは上記のサイトを見てほしいが、今回はSpreadSheetなどで加工がしやすいように、ただtime_total
だけが出るようにする。
実行するとレスポンスタイムが出た。単位は秒である。
0.108866
レイテンシを測るにはある程度の回数をこなしたいのでシェルスクリプト化して、何回も実行するようにする。
curl.sh
#!/bin/bash
for ((i=0 ; i<10 ; i++))
do
curl www.google.com -o /dev/null -w '%{time_total}\n' 2>/dev/null
done
これでこのような結果になる。
$ ./curl.sh
0.106411
0.098850
0.085296
0.100344
0.129105
0.102559
0.094472
0.103781
0.100983
0.096493
あとは、SpreadSheetに貼るなどして、最大値・最小値・平均値・中央値などを好きに計算すれば良い。
もちろん、直接計算するスクリプトを書く方法もあると思うが、このくらいなら普通にSpreadSheetとかにコピペしたほうが楽だと思う。