Edited at

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

More than 3 years have passed since last update.

今日は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攻撃にも使えるツールです。使用する際は十分注意してください。