このエントリーをはてなブックマークに追加


curlコマンドを使って、Webサーバやネットワークの性能計測(ダウンロード・アップロードの秒あたりの平均バイト数等)を行う

curlコマンドによるWebサーバやネットワークの性能測定方法例を以下に記します。


関連資料

curlコマンドの基本的な利用方法

curlコマンドはコマンドラインでのhttpクライアントとして、
Webサーバからのファイルの取得によく使われています。
curlはHTTP以外にも多数のプロトコルを扱うことができますが、ここではHTTP関連の機能にのみ触れます。)

利用方法は以下のようにコマンドの引数にURLを指定するだけです。
www.example.tldという架空のサーバの、/file/test.txtというファイルを取得するには以下のように実行します。

% curl http://www.example.tld/file/test.txt

このままですと、/file/test.txtの内容は標準出力、つまり端末の場面に表示されます。
ファイルに出力する場合にはリダイレクトを利用するか、
-oオプション、もしくは-Oオプションを利用します。

% curl http://www.example.tld/file/test.txt > test.txt
% curl -o test.txt http://www.example.tld/file/test.txt 
% curl -O http://www.example.tld/file/test.txt 

上記のコマンドはいずれもURLで示されたファイルの中身をカレントディレクトリのtest.txtに出力します。
(-OオプションはURLで示されたファイル名をそのまま出力先ファイル名にするオプションです)。

また、HTTPのリダイレクトが発生した場合には、それに追従する動作を行いません。
-Lプションを追加すると、Webサーバの指示するリダイレクトに追従して、最終的なURLにたどり着くことができます。

% curl -L http://www.example.tld/file/test.txt

デフォルトでは、curlコマンドはデータの取得情報をプログレスメータとしてリアルタイムに表示しますが、
この表示を抑制したい場合には、-sオプションを追加します。

% curl -o /dev/null http://www.example.tld/file/test.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
5086   221  5086 11242    0     0  47344      0 --:--:-- --:--:-- --:--:-- 47344
%
% curl -s -o /dev/null http://www.example.tld/file/test.txt -o /dev/null
%

curlコマンドの性能計測機能

curlコマンドにはファイルを取得するだけでなく、
その際の速度などを計測する機能がついています。
この機能を使えば、サーバやネットワークの性能を簡単に計測することが可能です。

以下のような情報を取得することができます。

content_type
要求したドキュメントのコンテントタイプ
http_code
HTTPのレスポンスコード
http_connect
(プロキシサーバの利用による)CONNECTメソッドを通したHTTPのレスポンスコード
local_ip
最終的なローカル(送信元)のIPアドレス
local_port
最終的なローカル(送信元)での使用ポート
num_connects
最終的な接続数
num_redirects
リダイレクトされた回数
redirect_url
(-Lオプションがなかった場合)リダイレクト要求されたURL
remote_ip
最終的なリモート(接続先)のIPアドレス
remote_port
最終的なリモート(接続先)のポート番号
size_download
ダウンロードした総byte数
size_header
ダウンロードしたHTTPヘッダの総byte数
size_request
送信したHTTPリクエストの総byte数
size_upload
アップロードした総byte数
speed_download
ダウンロード平均スピード(byte/秒)
speed_upload
アップロード平均スピード(byte/秒)
ssl_verify_result
SSLのベリファイ結果。0でベリファイ成功
time_appconnect
プロセスの開始から接続先へのSSLハンドシェイクの完了するまでの時間(秒)
time_connect
プロセスの開始から接続先(もしくはプロキシーサーバ)へのTCPのコネクションが完了するまでの時間(秒)
time_namelookup
プロセスの開始から名前解決が完了するまでの時間(秒)
time_pretransfer
プロセスの開始からファイル転送が開始されるまでの時間(秒)
time_redirect
プロセスの開始からリダイレクトが最終的に完了して最終的なトランザクションが開始されるまでの時間(秒)。最終的なトランザクションが開始されるまでの名前解決や各種のネゴシエーションの合計時間。複数のリダイレクトがあった場合にはそれらの総計となる
time_starttransfer
プロセスの開始から最初の1byteが転送されようとするまでの時間(秒)。time_pretransferとサーバが処理のために必要とした時間の合計となる
time_total
すべての処理が完了するまでの時間
url_effective
最終的にコネクトしたURL

time_*やspeed_*などの情報は性能計測に有用でしょう。
取得できる情報はcurlのバージョンによって異なるので、
詳細はcurlのmanを確認して下さい。

性能情報のフォーマットファイル

まず、curl_perf_format.txtという名前のファイルをカレントディレクトリに作成し、
そこに計測したい項目名を%{}で囲んだものを列挙します。
判りやすくするために、項目をラベルとして書いておいたり、改行(\n)を入れておくといいでしょう。

以下のようなファイルを作成しました。

url_effective: %{url_effective}\n
http_code: %{http_code}\n
time_total(sec): %{time_total}\n
time_namelookup(sec): %{time_namelookup}\n
time_connect(sec): %{time_connect}\n
time_appconnect(sec): %{time_appconnect}\n
time_pretransfer(sec): %{time_pretransfer}\n
time_redirect(sec): %{time_redirect}\n
time_starttransfer(sec): %{time_starttransfer}\n
size_download(byte): %{size_download}\n
size_upload(byte): %{size_upload}\n
size_header(byte): %{size_header}\n
size_request(byte): %{size_request}\n
speed_download(byte/sec): %{speed_download}\n
speed_upload(byte/sec): %{speed_upload}\n
content_type: %{content_type}\n
num_connects: %{num_connects}\n
num_redirects: %{num_redirects}\n
redirect_url: %{redirect_url}\n

curlコマンドで性能計測を行う

以下のようなオプションを付けてcurlを実行します。
(ファイル内容の表示とファイル作成時のIO負荷をなくすために、
取得したファイルは/dev/nullにリダイレクトし、-sオプションでダウンロードのプログレスメータの表示を止めています。)

% curl -s -w @perf_format.txt -o /dev/null http://www.example.tld/file/test.txt
url_effective: http://www.example.tld/file/test.txt
http_code: 200
time_total(sec): 0.231
time_namelookup(sec): 0.042
time_connect(sec): 0.056
time_appconnect(sec): 0.000
time_pretransfer(sec): 0.056
time_redirect(sec): 0
time_starttransfer(sec): 0.112
size_download(byte): 11162
size_upload(byte): 0
size_header(byte): 1534
size_request(byte): 352
speed_download(byte/sec): 48265.000
speed_upload(byte/sec): 0.000
content_type: text/html; charset=Shift_JIS
num_connects: 2
num_redirects: 0
redirect_url:
%

コマンド実行後、端末画面にcurl_perf_format.txtで指定したフォーマットで、このファイル取得実行時の性能情報が表示されています。
この機能を利用することで、実環境でのマシンやネットワークのプリミティブな性能の把握が可能となるでしょう。

以上、curlコマンドを使って、ネットワーク性能の計測を行う方法についてでした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:28:20