curlでHTTP処理にかかった時間を計測する

ウェブサイトのレスポンスの速度を外部から計測してGrowthForecastでグラフにしようと考え、httpingあたりが使えそうだったので、rpmforgeにあったパッケージを入れてみました。

そうしたら、

httping -i 3 -s -G -b http://google.co.jp/

...出力省略...
httping: http.c:54: get_HTTP_headers: Assertion `len_in < len' failed.
アボートしました

などと出てきてまともに動きません。
rpmforgeのhttpingのパッケージはバージョン2.3.3なのですが、どうもバグがあるようです。

バージョン2.3.4では修正されているのを確認したのですが、ソースから入れる必要があったので面倒だな。。と思っていたのですが、調べてみたらHTTPの処理時間くらいならcurlコマンドで取れることがわかりました。

 

curlには

-w, --write-out format

というオプションがあり、HTTPの処理の過程の

  • 名前解決にかかった時間
  • Webサーバへの接続にかかった時間
  • WebサーバへHTTPリクエストを送信した時間
  • WebサーバからHTTPコンテンツを受信開始した時間
  • WebサーバからHTTPコンテンツを受信完了した時間

の時間を取得することができます。

以下で実際の動きを見ることができます。

curl http://google.co.jp/ -o /dev/null -w \
"\
%{url_effective}への接続を開始。
名前解決の実行...\n\
名前解決の実行完了@%{time_namelookup}秒経過\n\
対象サーバへの接続...\n\
対象サーバへ接続完了@%{time_connect}秒経過\n\
対象サーバへHTTPリクエスト送信...\n\
対象サーバへHTTPリクエスト送信完了@%{time_pretransfer}秒経過\n\
対象サーバ側でHTTPコンテンツ生成...\n\
対象サーバ側でHTTPコンテンツ生成完了。HTTPコンテンツを受信開始@%{time_starttransfer}秒目\n\
HTTPコンテンツの受信中...\n\
HTTPコンテンツの受信完了。ここまでにかかった合計時間は%{time_total}秒でした。\n\
" \
2> /dev/null

上記を実行すると、

http://google.co.jp/への接続を開始。
名前解決の実行...
名前解決の実行完了@0.020秒経過
対象サーバへの接続...
対象サーバへ接続完了@0.028秒経過
対象サーバへHTTPリクエスト送信...
対象サーバへHTTPリクエスト送信完了@0.028秒経過
対象サーバ側でHTTPコンテンツ生成...
対象サーバ側でHTTPコンテンツ生成完了。HTTPコンテンツを受信開始@0.084秒目
HTTPコンテンツの受信中...
HTTPコンテンツの受信完了。ここまでにかかった合計時間は0.084秒でした。

のような感じで、HTTPの処理の過程のどこでどのくらい時間がかかったかを把握できます。

普段ダウンロードくらいにしか使っていませんでした。。

 

参考URL
http://d.hatena.ne.jp/hogem/20091122/1258863440