0

ウェブサーバの性能評価ツール apache bench 使い方 まとめ

WEBサーバを構築していると、どこまでの負荷に耐えられるか、パフォーマンス評価が必要となります。
この検証を確認しておかないと、アクセス過多になるとパフォーマンスが激悪になったり、
負荷がかかった時に、システムダウンなんてことになりかねません。
今回は、WEBサーバの性能を測定でき、Apacheに標準で付いているab(Apache Bench)ツールの使い方をまとめます。
abはDOS攻撃にも使えるツールです!!
使用する際は十分注意してください!!

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

■使い方
基本的には-nと-cオプションを使うことになります。
(逆に、これさえ覚えれば大体大丈夫!!)
-n:Totalで発行するリクエスト数を指定。
-c:同時接続数を指定。
-V:バージョン確認

■コマンド形式

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

その他オプション

オプション名 説明
-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 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

■実際に当方WEBサーバ(http://www.hachim.jp/ でabツールを実行

$ ab -n 1000 -c 100 http://www.hachim.jp/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.hachim.jp (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache
Server Hostname:        www.hachim.jp
Server Port:            80

Document Path:          /
Document Length:        4321 bytes

Concurrency Level:      100
Time taken for tests:   2.861 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1001
Total transferred:      4561557 bytes
HTML transferred:       4325321 bytes
Requests per second:    349.56 [#/sec] (mean) ←1秒あたりのリクエスト数
Time per request:       286.072 [ms] (mean) ←全リクエストの処理時間
Time per request:       2.861 [ms] (mean, across all concurrent requests) ←1リクエストあたりの処理時間
Transfer rate:          1557.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    7  10.1      4      92
Processing:    18  266 434.0    148    2309
Waiting:        2  261 432.8    140    2307
Total:         33  272 433.3    154    2314

Percentage of the requests served within a certain time (ms)
  50%    154
  66%    180
  75%    190
  80%    208
  90%    426
  95%   1786
  98%   2049
  99%   2055
 100%   2314 (longest request)

■リクエストは全部正常に処理されたの?
Complete requestsが正常に処理したリクエスト数です。
Failed requestsは、処理に失敗したリクエスト数です。

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

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

ab -n 100 -c 100

-n と -cの値をジョジョに増やして性能評価してください。

Failed requestsが0ではなくなった時、そこがそのWEBサーバの負荷の限界値となります。

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

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

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です