#navi(../)
* curlコマンドを使って、Webサーバやネットワークの性能計測(ダウンロード・アップロードの秒あたりの平均バイト数等)を行う [#zb296ec5]
curlコマンドによるWebサーバやネットワークの性能測定方法例を以下に記します。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連資料 [#o2781d4a]
-[[パケットキャプチャー Wireshark>ソフトウェア/ネットワーク/パケットキャプチャー Wireshark]]

* curlコマンドの基本的な利用方法 [#hbceea4a]
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コマンドの性能計測機能 [#l16d3d0c]
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を確認して下さい。


* 性能情報のフォーマットファイル [#x97c26be]
まず、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コマンドで性能計測を行う [#r484d706]
以下のようなオプションを付けて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コマンドを使って、ネットワーク性能の計測を行う方法についてでした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS