Apache Benchでサクッと性能テスト


今日はWEBサーバの性能測定についてです!!

WEBサーバを構築していると、どこまでの負荷に耐えられるか、パフォーマンスはどうか気になりますよね。
これをしっかり確認しておかないと、アクセス過多になるとパフォーマンスが激悪になったり、
負荷がかかった時に、システムダウンなんてことになりかねないです。
で、そんなことにならないように気軽にWEBサーバの性能を測定できるのがApacheに標準で付いているab(Apache Bench)ツール。

Apache Benchは、DOS攻撃にも使えるツールです!! 使用する際は十分注意してください!!

Apache Benchとは

「ab」はApache Bench(アパッチ ベンチ)の略で、Apacheで標準に付いているWEBサーバの性能を計測するためのコマンドです。
Apacheをインストールすると、<Apache Install Directory>\bin\に格納されていて、名前はwindowsだとab.exeになります。

使い方

基本的には-n-cオプションを使うことになります。
(逆に、これさえ覚えれば大体大丈夫!!)

-nには、Totalで発行するリクエスト数を指定。
-cには、同時接続数を指定。

コマンド形式はこちら。

ab.exe -n <Total発行リクエスト数> -c <同時接続数> <URL>

主なオプションは、以下になります。
他にも沢山あるので、詳細は -h オプションで確認してみてください。

オプション名 説明
-n 数値 リクエストの総数を数値で指定
-c 数値 同時に発行するリクエストの数を数値で指定
-t 数値 サーバからのレスポンスの待ち時間(秒)を数値で指定
-A ユーザー名:パスワード ベーシック認証が必要なコンテンツにテストする
-P ユーザー名:パスワード 認証の必要なプロキシを通じてテストする
-X プロキシサーバ名:ポート番号 プロキシ経由でリクエストする場合に指定
-V バージョンを表示
-h ヘルプを表示

使ってみる

例えば、100ユーザが同時にhttp://www.example.co.jp/ に1リクエストを発行した場合を想定。

ab -n 100 -c 100 http://www.example.co.jp/

同時に100ユーザが、1ユーザーあたり10リクエストを発行した場合を想定。
-nには100 x 10 = 1000を指定します。

ab -n 1000 -c 100 http://www.example.co.jp/

接続先にベーシック認証がかかっている場合。
-Aの後にベーシック認証ユーザとパスワードを:(コロン)で区切って指定します。

ab -n 100 -c 100 -A hogeuser:hogepass http://www.example.co.jp/

同時接続数よりTotal発行リクエスト数が少ないとエラーメッセージが表示されます。
同時に100人で合計10リクエストを送るなんて、できないからですね。

ab -n 10 -c 100 -A hogeuser:hogepass http://www.example.co.jp/
ab: Cannot use concurrency level greater than total number of requests
...

見かた

以下のコマンドを実行した時の結果サンプルです。URLはダミーですよ。

ab -n 100 -c 100 http://www.example.co.jp/

Server Software: Apache/2.4.10
Server Hostname: http://www.example.co.jp/
Server Port: 80

Document Path: /
Document Length: 25559 bytes

Concurrency Level: 100
Time taken for tests: 8.374 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 2599100 bytes
HTML transferred: 2555900 bytes
Requests per second: 11.94 #/sec
Time per request: 8374.479 ms
Time per request: 83.745 ms
Transfer rate: 303.09 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 16 4.1 15 42
Processing: 1382 4432 1913.3 4653 7255
Waiting: 1371 4334 1912.9 4395 7240
Total: 1398 4448 1913.6 4664 7271

Percentage of the requests served within a certain time (ms)
50% 4664
66% 5844
75% 6273
80% 6607
90% 6891
95% 7105
98% 7269
99% 7271
100% 7271 (longest request)

こんな表示が出ます。。
何が何だかよくわからないと思うので、逆引きで説明します。

・リクエストは全部正常に処理されたの?
Complete requestsが正常に処理したリクエスト数です。
Failed requestsは、処理に失敗したリクエスト数です。
今回は100リクエストを発行して、Complete requestsが100、Failed requestsが0になっているので、
全てのリクエストが正常に処理されたことを表しています。めでたしめでたし。

・何リクエストまで耐えられるの?

ab -n 100 -c 100

の、-n と -cの値をジョジョに増やしていってください。
そのうち、Failed requestsが0ではなくなるので、そこがそのWEBサーバの負荷の限界です。。

・秒間どれくらいのリクエストをさばけるの?
Requests per secondを見てみてください。
11.94とあるので、1秒あたり約12リクエストまでさばけることになります。
WEBサーバではこの数値がとても重要になるので、これだけでも覚えておくと良いでしょう。

・パフォーマンスは?
1リクエストあたりの処理時間を表しているのがTime per request(mean, across all concurrent requests)です。
今回は、83.745msかかったことになります。
あと、紛らわしいのですが、Time per request(mean)というのもあります。
これは、全リクエストの処理時間になります。

さいごに

WEBサーバの性能を計測するツールとしては、以下もあるので状況に応じて使い分けてみてください。

・Apache JMeter
・httperf
・weighttp

Apache Benchは、DOS攻撃にも使えるツールです。使用する際は十分注意してください。