今日は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 <同時接続数> \
主なオプションは、以下になります。
他にも沢山あるので、詳細は -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] (mean)
Time per request: 8374.479 [ms] (mean)
Time per request: 83.745 [ms] (mean, across all concurrent requests)
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攻撃にも使えるツールです。使用する際は十分注意してください。