くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

curlで時間計測

開発中のSSSAPIのレスポンスタイムを計測したときに調べた備忘録。

計測した結果の記事はこちら。
SSSAPIと他のサービスをいろいろ比較してみた(GAS/SheetDB/sheety/Stein/sheetsu)

以下の記事がわかりやすく、こちらを参考にした ・curlでパフォーマンス測定 | DevelopersIO

計測方法

こんな感じで、それぞれの時間をCSV形式で出力できる。

curl  https://example.com -o /dev/null -s -w @- << EOF
%{size_download},
%{size_upload},
%{speed_download},
%{speed_upload},
%{time_namelookup},
%{time_connect},
%{time_appconnect},
%{time_pretransfer},
%{time_starttransfer},
%{time_total}\n
EOF

それぞれの値は以下の通り。

変数名 解説
size_download ダウンロードしたデータの総量(bytes)
size_upload アップロードしたデータの総量(bytes)
speed_download ダウンロードしたデータ量の1秒あたりの平均(bytes/sec)
speed_upload アップロードしたデータ量の1秒あたりの平均(bytes/sec)
time_namelookup DNSの名前解決が完了した時間(sec)
time_connect TCPなどのコネクションの確立が完了した時間(sec)
time_appconnect TLSなどの接続、ハンドシェイクが完了した時間(sec) (7.19.0で追加)
time_pretransfer データの転送が開始した時間(sec)
time_starttransfer サーバーからレスポンスの最初のデータを受信した時間(sec)
time_total 全体の処理にかかった時間(sec)

複数回実行する関数

毎回実行するのはめんどくさいので、
指定回数繰り返す関数を作ってみた。

~/.bashrc等に含めて、curl-times-csvを使えるようにしておく。

# ~/.bashrc
# 使い方: $ curl-times-csv <url> <times>
function curl-times-csv() {
  URL="$1"
  N="$2"
  if [ "${N}" == "" ]; then
    N=3 
  fi  

  echo "remote_ip,http_code,size_download,size_upload,speed_download,speed_upload,time_namelookup,time_connect,time_appconnect,time_pretransfer,time_starttransfer,time_total"
  for i in $(seq ${N});do
    sleep 1
    curl -L ${URL} -o /dev/null -s -w @- << EOF
%{remote_ip},
%{http_code},
%{size_download},
%{size_upload},
%{speed_download},
%{speed_upload},
%{time_namelookup},
%{time_connect},
%{time_appconnect},
%{time_pretransfer},
%{time_starttransfer},
%{time_total}\n
EOF
done
}

使い方はこんな感じ。

# デフォルトの回数は3回
$ curl-times-csv https://example.com
remote_ip,http_code,size_download,size_upload,speed_download,speed_upload,time_namelookup,time_connect,time_appconnect,time_pretransfer,time_starttransfer,time_total
2404:6800:4004:81c::2004,200,14148,0,48786.000,0.000,0.019082,0.029019,0.159407,0.159728,0.286718,0.290678
2404:6800:4004:81c::2004,200,14107,0,53033.000,0.000,0.005623,0.015292,0.130902,0.131168,0.264514,0.266589
2404:6800:4004:81c::2004,200,14089,0,51047.000,0.000,0.005564,0.021174,0.135981,0.136204,0.275238,0.276625

# 1回のみの場合
$ curl-times-csv https://example.com 1
remote_ip,http_code,size_download,size_upload,speed_download,speed_upload,time_namelookup,time_connect,time_appconnect,time_pretransfer,time_starttransfer,time_total
2404:6800:4004:81c::2004,200,14148,0,48786.000,0.000,0.019082,0.029019,0.159407,0.159728,0.286718,0.290678

以上!!

参考にしたサイトさま