ab
Apacheにはデフォルトで、 ab という負荷テストツールがついています。
負荷テストとは、同時にある回数のリクエストを発行し、Apacheがどれだけの時間でレスポンスを返せるかを測定することです。
このツールはab.exeという実行ファイルで、Apacheをインストールしたディレクトリのbinディレクトリ配下にあります。
abコマンドのヘルプ
ab.exeの実行は色々なオプションがあるので、オプションの詳細を見たい場合はコマンドプロンプトで
ab または ab -h
と実行してください。abの詳細な使用方法が表示されます。
この時、abというファイルが見つかりません、というようなメッセージが表示されたら絶対パスを指定するか、binディレクトリをパスに追加してください。
総リクエスト回数の指定
まず、負荷テストですのでリクエスト回数を指定します。
リクエスト回数は -n 回数 というように-nオプションを使用して回数を指定します。これを指定しなかった場合、リクエスト回数は1回となるようです。
-nで指定する回数は総リクエスト回数で、同時にリクエストする回数ではありません。
同時リクエスト回数の指定
同時にリクエストする回数を指定するには -c 回数 というように-cオプションを使用して回数を指定します。
-cオプションを使用する時、総リクエスト回数より同時リクエスト回数のほうが多い場合、エラーとなります。
また、総リクエスト回数を指定しない場合に同時リクエスト回数を指定した場合は、勝手に同時リクエスト回数は1となってしまうようです。
同時リクエストの出来る最大回数は 64 だと思います。違ってたらごめんなさい。
レスポンス時間制限の指定
負荷テストで、レスポンス時間にタイムリミットを秒数で指定することが出来ます。
-t 回数 というように-tオプションを使用して秒数を指定しますが、例えば以下のようなコマンドを実行したとします。
ab -n 10000 -c 50 -t 6 http://localhost/test/index.html
これは、同時に50リクエストを実行していき、合計10000リクエスト実行しようとしています。ただし、-tオプションでレスポンス時間を6秒としています。
これを指定することにより6秒以内にいくつのリクエストが正常に処理されたかを調べることが出来ます。
認証制限しているページの測定方法
負荷テストをしたいページによっては認証制限をかけていることもあると思います。
abでは認証制限をかけているページも -A オプションを使用してテストすることが出来ます。
ヘルプを見ればわかるようにユーザ名とパスワードをコロンで分けて実行します。
具体的には
ab -A user:pass http://localhost/basic/index.html
というように記述します。上記はuserというユーザ名とpassというパスワード名を指定し、その次にリクエストしたいページを指定しています。
このページはBasic認証しているため、ユーザ名とパスワードが間違えていると負荷測定できません。また、ユーザ名とコロンの間にスペースがあってはいけません。同様にコロンとパスワードの間にスペースがあってもエラーとなりますので注意して下さい。
パスワードをSHAで暗号化する場合は-sオプションを使用
暗号化しない場合(クリアテキスト)-pオプションを使用します。
出力結果の見方
出力結果は英語で表示されます。
以下のコマンドを実行したときの出力結果を表示します。
ab -n 10000 -c 64 http://localhost/test/index.html
出力結果の見方
出力結果の意味は以下を参考にして下さい。わかる範囲で書いています。
Server Software | Apacheのバージョン |
Server Hostname | サーバマシン名 |
Server Port | ポート番号 |
Document Path | ファイルのパス |
Document Length | アクセスしたファイルのサイズ |
Concurrency Level | 同時送信リクエスト数 |
Time taken for tests | 負荷テストに要した処理時間 |
Complete requests | 成功にリクエストできた回数 |
Failed requests | 失敗したリクエスト回数 |
Write errors | ??? |
Total transferred | ファイルの総容量???(単位はバイト) |
HTML transferred | アクセスしたファイルの容量(単位はバイト) |
Requests per second | 1秒あたりのリクエスト回数 |
Time per request | 1同時リクエストあたりに要した処理時間(単位はミリ秒) |
Time per request(mean, across all concurrent requests) | 1リクエストあたりに要した処理時間(単位はミリ秒) |
Transfer rate | 1秒あたりに受信した転送レート(単位はキロバイト) |
省略可能
最後にabのヘルプからわかるようにURLの http://と:80は省略可能です。
逆を言えばポートが違う時やプロトコルが異なる場合は指定する必要があります。