Apache Benchとは
Apach BenchはApache HTTP Serverに同梱されているベンチマークソフトです。
- 同時接続数
- リクエスト数
- サーバ名
を指定することでWEBサーバに意図的に負荷を発生させ、その処理結果を以ってサーバの処理能力を測定することができます。
アクセス数が少ないうちはサーバの処理能力が問題になることは少ないと思われますが、いざ何かの拍子に大量のアクセスが発生した際にサーバがダウンした!なんてことがないように自分のサーバの処理能力を知っておくのも大事なのではないかと思います。
Apache Benchの使用法
コマンドラインからこのテストを行う際の基本的な文法は
ab [-オプション] サーバのURL
となります。たとえば、10の同時接続で100件のリクエストを発生させるテストを行うとすると
ab -n 100 -c 10 http://example.com/
と入力することで可能となります。ちなみにその他のオプションとして
- -t 数値・・・サーバからのレスポンスの待ち時間を数値(秒)で指定
- -p ファイル名・・・サーバへ送信するファイルがある場合に指定
- -t コンテンツタイプ・・・サーバへ送信するコンテンツヘッダを指定
- -v 数値・・・指定された数値に該当する動作情報を表示
- -c 'cookie名称=値'・・・cookie値を渡してテストを実行
- -k HTTP1.1のkeep aliveを有効にしてテスト
などなど、様々なものがあります。それでは当サーバにてテストを行ってみることにします。
abにてテストを行ってみる
早速コマンドラインにて以下のように入力してみます。(お使いの環境に併せてサーバ名を変更してください)
ab -n 500 -c 50 http://chee-s.net/
○○○○@Homesvr01:~# ab -n 500 -c 50 http://chee-s.net/
This is ApacheBench, Version ○.○ <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking chee-s.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests
Server Software: Apacheのバージョン
Server Hostname: chee-s.net
Server Port: 80
Document Path: /
Document Length: 526 bytes
Concurrency Level: 50
Time taken for tests: 1.702 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Non-2xx responses: 500
Total transferred: 350500 bytes
HTML transferred: 263000 bytes
Requests per second: 293.69 [#/sec] (mean)
Time per request: 170.246 [ms] (mean)
Time per request: 3.405 [ms] (mean, across all concurrent requests)
Transfer rate: 201.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.7 1 4
Processing: 12 162 27.7 171 177
Waiting: 12 162 27.7 171 177
Total: 14 163 27.3 172 182
Percentage of the requests served within a certain time (ms)
50% 172
66% 172
75% 172
80% 172
90% 174
95% 174
98% 174
99% 174
100% 182 (longest request)
なにやらズラズラと結果が表示されていますがどう見たらよいのでしょうか?(**)
Apache Benchの結果とポイント
もちろん全て理解するのが一番良いのでしょうが、まずは注意すべきポイントを絞って覚えてしまいます。全部を覚えられるほど記憶力に自身があるわけではありませんので・・・
Failed requests
NGリクエストの件数を表します。これが発生するということはサーバの処理能力を超えたリクエストが発生したと考えてよいでしょう。サーバのチューニングやマシンの機能向上などが必要かもしれません。幸い今回ぐらいの負荷であれば我がサーバは処理できそうな気配です。
Requests per second
1秒間に処理できるリクエストの数を表します。もちろんこの値が大きい方が処理能力も高いといえるでしょう。他所様のテスト結果と見比べると若干数値が劣るように見えました。。。
Connection Times Connect/Processing/Waiting
リクエストに対する処理に要する時間の内訳が表示されます。(接続/処理/待ち時間ぐらいなかんじ)
他にも色んな項目がありますが、簡単な英語なのでなんとなく理解できるかな?という程度です。
ほんとはもう少し大きな負荷をかけてみたいのですが(同時接続100で1000件のリクエストとか)、試したらエラーが出てしまったので今度はその辺りの原因と対策を調べてみることにします。