パフォーマンス測定(ApacheBench)


・Apacheに付属しているabコマンドを使う
例:ab -n 1000 -c 10 "http://localhost/?url=www.webike.net&w=140&h=87&ver=2&f="

-n 数値 テストで発行するリクエストの回数を数値で指定
-c 数値 テストで同時に発行するリクエストの数を数値で指定
-t 数値 サーバからのレスポンスの待ち時間(秒)を数値で指定
-p ファイル名 サーバへ送信するファイルがある場合に指定
-T コンテンツタイプ サーバへ送信するコンテンツヘッダを指定
-v 数値 指定した数値に応じた動作情報を表示
-w 結果をHTMLで出力(出力をファイルに保存すればWebブラウザで表組みされたものが見られる)
-x 属性 HTML出力のtableタグに属性を追加(BORDERなど)
-y 属性 HTML出力のtrタグに属性を追加
-z 属性 HTML出力のtdまたはthタグに属性を追加
-C 'Cookie名称=値' Cookie値を渡してテストする
-A ユーザー名:パスワード ベーシック認証が必要なコンテンツにテストする
-P ユーザー名:パスワード 認証の必要なプロキシを通じてテストする
-X プロキシサーバ名:ポート番号 プロキシ経由でリクエストする場合に指定
-V abのバージョン番号を表示
-k HTTP/1.1のKeepAliveを有効にしてテストする
-h abのヘルプを表示

●abを実行するコンピュータの位置
abがインストールされているコンピュータとなると、まずはWebサーバそのものということになるだろう。
しかし、Webサーバでの実行は、効果測定に適しているとはいい難い。
なぜなら、それは計算時間を測定しているだけであって、接続に要する時間などを測定できるわけではないからである。
abは、少なくともWebサーバとは別のコンピュータで実行したい。
できれば、ルータの直前か直後(図1)がいいだろう。そうすることで、より現実的なパフォーマンスを測定できるからである。

●発生させる同時接続数量
リクエスト数はサンプリング数量だから、あまり多過ぎない程度に大きめの値を指定すればいい。
それに対し、同時接続数の指定は慎重に選択したい。
そのWebサーバへの同時接続数があらかじめ予測できるようであれば、その数値の前後30%程度の範囲で測定すればいいだろう。
予測がつかない場合は広い範囲で測定するしかないが、どちらにしても同時接続数の限界を測るのも重要なポイントの1つだ。

また、1台のコンピュータが発生させられる同時接続数についても注意したい。
例えば、高性能なUNIXサーバに対して測定する場合、相当な数の同時接続を発生させる必要がある。
しかし、普通のPCサーバで発生させられる同時接続数には、おのずと限界がある。
従って、複数台のコンピュータにabを入れて測定しなければならない。たとえ、1台のコンピュータでこなせる数だとしても、複数台での測定も試してみることを勧める。

●リクエストするURL
最後に、リクエストするURLであるが、これも十分に検討するべき項目だといえる。
先にも述べたとおり、1つのWebページを表示するには、HTMLファイルとともに画像ファイルなども必要になる。
しかし、abは単一かつ同一のファイルをリクエストすることしかできない。

これは、Webサーバにとって有利な条件での測定となってしまう。
そこで、複数台のコンピュータから、それぞれ別なファイルをリクエストするなどの工夫をしてみたい。
また、リクエストするファイルの容量によって、どのような変化があるかなども、測定してみるといいだろう。

さらには、静的なファイルだけでなく、プログラムを実行して作成されるページへのリクエストも測定したい。
これも、単純なプログラムから、複雑なプログラムまで測定しておく。
どんな場合でもいえることだが、さまざまなパターンの測定を、より多く集めた方が、結果の分析も多角的に行えるものである。