Apacheには、標準で「ab」(Apache Bench) というツールが付属しています。
同時接続数とリクエスト数とURLを指定すれば、性能が測定できます。
ab コマンドによって、リクエストを発生させ、接続時間・処理時間・待ち時間などの統計を取得することができます。
例えば、同時接続数が 100で、リクエスト数 1,000 になるまで、http://example.com/index.html にアクセスするならば
ab -n 1000 -c 100 http://example.com/index.html
認証が必要なページには、-A オプションを使用します。
-n 数値:テストで発行するリクエストの回数を指定
-c 数値:テストで同時に発行するリクエストの数を指定
-A ユーザ名:パスワード
:ベーシック認証に必要なユーザ情報を指定
ただし、ab は単一ファイルへのリクエストしかできないので、画像ファイルなどのアクセスが発生する実環境とは違う点は考慮する必要があります。
下記のような結果になりました。
# ab -n 1000 -c 100 http://example.com/index.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.121.2.1 $>
apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (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
Finished 1000 requests
Server Software: Apache/2.0.46
Server Hostname: hoge.example.com
Server Port: 80
Document Path: /index.html
Document Length: 286 bytes
Concurrency Level: 100
Time taken for tests: 0.260966 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 467000 bytes
HTML transferred: 286000 bytes
Requests per second: 3831.92 [#/sec] (mean)
Time per request: 26.097 [ms] (mean)
Time per request: 0.261 [ms] (mean, across all concurrent requests)
Transfer rate: 1747.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 9 23 3.4 25 26
Waiting: 5 22 3.6 23 26
Total: 9 23 3.4 25 26
Percentage of the requests served within a certain time (ms)
50% 25
66% 25
75% 25
80% 25
90% 26
95% 26
98% 26
99% 26
100% 26 (longest request)
1リクエスト当たり 0.26 ミリ秒、1秒間に処理できるリクエスト数が 3831 という結果になりました。当然、静的なコンテンツなのでさほど負荷がかからないので好結果となりました。
結果の読み方ですが、
まずリクエストの成否(Complete requestsとFailed requests)を見てみます。
リクエストがすべて成功していればいいのですが、一部が失敗しているようならWebサーバの処理が追い付いていないと判断できます。同時接続数の限界を超えている可能性があります。
Complete requests: 1000
Failed requests: 0
次に1秒間に処理されたリクエスト数(Requests per second)を見てみましょう。1秒間にどれだけ処理できたかがわかります。
Requests per second: 3831.92 [#/sec] (mean)
Time per request: 0.261 [ms] (mean, across all concurrent requests)
接続時間・処理時間・待ち時間の内訳(Connect/Processing/Waiting)は、測定したリクエスト全体でのばらつきやリクエスト当たりの処理の内訳を見極るための指標にします。
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 9 23 3.4 25 26
Waiting: 5 22 3.6 23 26
Total: 9 23 3.4 25 26