curlコマンドによるWebサーバやネットワークの性能測定方法例を以下に記します。
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コマンドにはファイルを取得するだけでなく、
その際の速度などを計測する機能がついています。
この機能を使えば、サーバやネットワークの性能を簡単に計測することが可能です。
以下のような情報を取得することができます。
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を実行します。
(ファイル内容の表示とファイル作成時の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コマンドを使って、ネットワーク性能の計測を行う方法についてでした。