abコマンドで負荷テスト
「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ユーザが同時に10リクエストを発行した場合を想定。
-nには100 x 1-0 = 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攻撃にも使えるツールです。使用する際は十分注意してください。
参考リンク