手軽に Apache のベンチマークを取る ab コマンド
こんにちは nakamura です。毎年この季節になると井上陽水の少年時代が脳内リピートされて何だか切ない気持ちになってしまいます。僕だけ??
Web サイトのベンチマークを取る!という時に一番有名なのはやはり Apache JMeter でしょうか。複雑な設定も簡単にできるし結果を表にしてくれたりと確かに便利ですね~。ただ、今回紹介する ab コマンド(Apache Bench の略)は、そこまで多機能じゃなくていいからさくっとベンチマークが取りたい!という時に重宝するコマンドラインのツールです。
オプション色々
オプションは結構色々ありますが、個人的によく使うのはこんな所でしょうか。
-n
requests 。最終的に発行するリクエストの総数。
-c
concurrency 。直訳すると同時並行性?同時接続する仮想クライアントの数という感じでしょうか。
-k
KeepAlive 接続をしてくれます。
-A
基本認証を使用する際、認証情報を指定するのに使います。
-H
HTTP ヘッダの指定ができます。ユーザエージェントを偽装したりとか。
-v
1 ~ 4 の数字を与える事で結果表示の詳細度を指定できます。HTTP のレスポンスヘッダが見れたりします。
他にも HTML 形式で結果を掃き出したりとか、まだまだオプションあるので ab -h や man ab で確認してみてください。
実際に使ってみよう
簡単なコマンド例と結果の表示を見てみましょう。
以下はユーザエージェントを AB-USER-AGENT に偽装、KeepAlive を有効にして、同時接続数 10 で 100 リクエスト送信する例です。また、-A オプションで基本認証の認証情報を渡しています。
ab -n 100 -c 10 -k -A user:password -H "User-Agent: AB-USER-AGENT" http://localhost/
出力結果はこんな感じ。
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 localhost (be patient).....done
Server Software: Apache
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 45 bytes
Concurrency Level: 10
Time taken for tests: 0.023 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Keep-Alive requests: 100
Total transferred: 33609 bytes
HTML transferred: 4725 bytes
Requests per second: 4315.74 [#/sec] (mean)
Time per request: 2.317 [ms] (mean)
Time per request: 0.232 [ms] (mean, across all concurrent requests)
Transfer rate: 1416.48 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 3
Processing: 1 2 0.6 1 4
Waiting: 1 2 0.6 1 3
Total: 1 2 1.0 1 7
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
WARNING: The median and mean for the waiting time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 2
80% 2
90% 3
95% 5
98% 5
99% 7
100% 7 (longest request)
1 秒間に 4315.74 回のリクエストを発行し、トータルで 33609 bytes の通信を行っている事が分かります。テスト全体の所要時間は 0.023 秒ですね。
終わりに
Jmeter のように付随する画像を同時に取得したり、複数のページにまたがってリクエストを送信したりはできませんが、簡易的なベンチマークを行うには充分な機能を備えています。たいがいのディストリビューションで Apache と一緒にインストールされるはずなので、ぜひ試しに使ってみてください。