読者です 読者をやめる 読者になる 読者になる

TenForward

技術ブログ。はてなダイアリーから移転しました

httperf

Benchmark

httperf をちょい突っ込んで使うので,関係しそうなオプションだけ man を超訳(←所々 ^^;)してみました.

       httperf  [--add-header  S]  [--burst-length N] [--client I/N] [--close-
       with-reset] [-d|--debug N]  [--failure-status  N]  [-h|--help]  [--hog]
       [--http-version   S]   [--max-connections   N]   [--max-piped-calls  N]
       [--method S] [--no-host-hdr] [--num-calls N] [--num-conns N]  [--period
       [d|u|e]T1[,T2]]  [--port  N]  [--print-reply  [header|body]]  [--print-
       request [header|body]] [--rate X] [--recv-buffer  N]  [--retry-on-fail-
       ure]  [--send-buffer  N]  [--server  S]  [--server-name  S] [--session-
       cookie] [--ssl] [--ssl-ciphers L] [--ssl-no-reuse] [--think-timeout  X]
       [--timeout  X]  [--uri  S] [-v|--verbose] [-V|--version] [--wlog y|n,F]
       [--wsess N,N,X] [--wsesslog N,X,F] [--wset N,X]
--client=I/N
httperf を実行しているマシンが,全 N 台のうちの I 台である事を指定します.I は 0 から N-1 の間である必要があります.負荷ジェネレータの中には (例えば --wset),全てのクライアントが全く同一の負荷を生成しない事を保証するためのバイアス値として,クライアントの同一性を使用します.何台かのクライアントマシンによるテストを実行するとき,このオプションを指定するのは一般的に良いアイデアです.
--hog
通常は httperf は ephemeral ポート (1024 から 5000 番の間) を使おうとします.高負荷のテストをする場合,これがボトルネックになるので,このオプションを使用します.このオプションを指定すると,必要なだけたくさんの TCP ポートを使用します.NT server に対する測定を行う場合は,このオプションを指定する必要があります.これは,NT と UNIX マシンの間の TCP の非互換性を避けるためです.
--max-connections=N
セッション毎の最大コネクション数 N を指定します.このオプションは --wsess と --wsesslog と同時に使われた場合のみ意味を持ちます.
--max-piped-calls=N
最大 N 個のパイプライン呼び出しがコネクション毎に発行されるかを指定します.このオプションは --wsess と --wsesslog と同時に使われた場合のみ意味を持ちます.
--num-calls=N
このオプションはリクエストベースの負荷のみで意味があります.コネクション毎の呼び出し回数を指定します.N の値が 1 以上の時,サーバは持続的コネクションをサポートしている必要があります.このオプションのデフォルト値は 1 です.もし --burst-length が B に設定されている場合,N 回の呼び出しは,B 個のパイプライン毎のバーストとして発行されます.このため,バーストのトータル数は N/B (per connection) となります.
--num-conns=N
このオプションはリクエストベースの負荷のみで意味があります.生成するコネクションの総数を指定します.コネクション毎に,--num-calls と --burst-length オプションで指定された呼び出しが行われます.N 接続に達するとすぐに,テストの成否に関わらず,テストは停止します.
--rate
(--raとも略せる)コネクションもしくはセッションが生成される固定レートを指定します.デフォルトではコネクションが生成されます.--wsess もしくは --wsesslog が指定されると,セッションが生成されます.どちらの場合でも,0 を指定すると,連続したコネクションまたはセッションが生成されます.デフォルト値は 0.
--server
サーバ名(IPアドレス)を指定します.デフォルトは "localhost".
--timeout=X
httperf がサーバの反応を待つ時間を指定します.タイムアウトの指定は秒単位で,分数も可能である (例えば --timeout 3.5).このタイムアウトTCP コネクションを確立するとき,リクエストを送るとき,リプライを待つとき,リプライを受けとるとき,に使われます.もし,これらの処理の間,リクエストが許された時間内で処理を進めることが出来なかった場合,httperf はリクエストが死んでしまったとみなします.そして関係するコネクションやセッションを閉じ,client-timeout エラーカウントを増やします.リプライを待っている時の実際のタイムアウト値は,このタイムアウト値と,think-timeout (--think-timeout を参照) の値の和となります.
--uri=S
サーバ上のアクセスする URI を書きます.("Specifies that URI S should be accessed on the server." と合って,URI を書きそうですが,実際はパスの部分を書きます.)負荷ジェネレータ (e.g. --wset) の中には,このオプションが,アクセスする URI のプレフィックスを意味する場合もあります.
--wlog=B,F
このオプションは,URI アクセスの特定のシーケンスを生成するときに使用できます.これはサーバのログファイルに記録されているアクセスを再生する時に役立ちます.パラメータ F は,アクセスする URI の ASCII NUL で区切られたリストの含まれるファイル名です.パラメータ B を "y" に設定すると,httperf はリストの最後に到達したときに,ファイルの最初に戻ります (リストの URI に繰り返しアクセスします).B に "n" をセットすると,URI リストの最後に到達する時までにテストは停止するでしょう (訳注: --num-conns の数に到達したら最後に到達しなくても終わるので「までに」と書いてある).
--wsess=N1,N2,X
独立したリクエストの代わりにセッションの生成と計測を行います.セッションとは,ユーザの think-time によって一定時間空いたバーストの連続から構成されます.それぞれのバーストは,サーバへの固定値 L の呼び出しで構成されます (L は --burst-length で指定されます).バーストにおける呼び出しは以下のように発行されます: まず最初に,単一の呼び出しが発行されます.この単一のリクエストに対するリプライを受け取るとすぐに,バーストの残りの呼び出しすべてが並列で発行されます.この並列の呼び出しは,既存の持続的接続上のパイプライン呼び出し,もしくは別々のコネクション上の独立した呼び出しのどちらかとして発行されます.持続的接続が使われるかどうかは,最初の呼び出しで,サーバが返したリプライに "Connection: close" ヘッダ行が含まれるかどうかに依存します.もし,このヘッダが返されている場合は,分離したコネクションが使われます.

このオプションは以下のパラメータを取ります: N1 は生成するセッションの総数です.N2 はセッション毎の呼び出し数です.X はユーザの think-time(秒) で,バーストの連続した呼び出しを分割します.例えば,"--wsess=100,50,10 --burst-len 5" が指定されると,50 の呼び出しを含む 100 セッションが生成されます.バーストのそれぞれは 5 個の呼び出しからなるので,トータルで 10 のバーストがセッション毎に生成されます.バーストの間のユーザのthink-time は 10 秒になります.ユーザの think-time の X は,前のバーストの最後のリプライを受信してから,次のバーストの最初のリクエストを送るまでの間を意味することに注意してください.

セッションに関係するテストは,セッションの N1 回のリクエストが成功するか失敗するかすると,即座に終了します.もし,--timeout と --think-timeout オプションで指定されたタイムアウト以上の時間を,セッション内のオペレーションが消費した場合,失敗したとみなします.加えて,--failure-status で指定したコードとマッチするコードをサーバが返した場合も,セッションが失敗したとみなします.
--wsesslog=N,X,F
これは,--wsess と同様のセッション負荷ジェネレータを指定します(まずは--wsessの説明を読んでください).--wsesslog を指定すると,URI のシーケンスと数,リクエストメソッド,think-time と burst-length パラメータを含む,多数のユーザセッションの特徴を,入力ファイル F 内に指定することが出来ます.--wsess と同様の二つのパラメータが存在し,生成するセッション数である N,バーストとバーストの間の think-time である X があります (この X はデフォルト値になります.なぜなら,入力ファイル F でもバーストごとの think-time が指定出来ます.簡単な入力ファイルの例で,設定可能なパラメータを示します.
# コメント行は ``#'' で始まる行です.スペースだけの行はセッション
# を分けます (複数のブランク行が null セッションを生成することは
# ありません).他の全ての行は URI シーケンスを指定します (1 行 1
# uri).もし,行頭の文字がホワイトスペース (例えばスペースやタブ)
# であれば,uri は前のバーストでない uri の後のバーストの一部分で
# あるとみなされます.
# session 1 definition (this is a comment)
/foo.html think=2.0
/pict1.gif
/pict2.gif
/foo2.html method=POST contents='Post data'
/pict3.gif
/pict4.gif

# session 2 definition
/foo3.html method=POST contents="Multiline\ndata"
/foo4.html method=HEAD
上記の例では 2 つのセッションを指定しています.(続く)