2008-07-24
■[Apache]【第6回】abコマンドを使ってみよう

使ってみよう
やや退屈な話が続きましたので、ちょっと息抜きに実践的な内容にしてみたいと思います。
/usr/local/apache/bin/ab -c 10 -n 100 'http://localhost/foo.html'
こちらは御存知abコマンド。WEBシステムのベンチマーク定番ツールです。基本的なオプションは以下の通りです。
- -c: 同時接続クライアント数
- -n: 総リクエスト数
「-c 10 -n 100」であれば、同時接続10を10回やって総数100個のリクエストが投げられるということになります。
UNIXコマンド等で、使い方を調べるのに適当にみつけた解説ページを読むのも一つの手ですが、間違いも結構あります。マニュアルやコマンドラインヘルプを見る癖をつけるとよいと思います。
/usr/local/apache/bin/ab --help
ほとんどのコマンドは「--help」で簡略ヘルプを出すのが流儀となっています。更に詳しく見たいときには、man(例: > man hogehoge)を見るのが常套手段です。ただ英語のマニュアルは辛いので、こんなサイトを参考にするのもよいと思います。
http://www.jp.freebsd.org/man-jp/search.html
注意事項
1. ネットワーク・システム負荷を考慮しよう
abを実行するクライアントとアクセス先のサーバ間には、当然の如く実行した分のパケットが流れます。
/usr/local/apache/bin/ab -c 100 -n 10000 "http://example.com/foo.html"
仮に上記のように実行したら、途中経路のネットワーク機器に過負荷を与えてしまったり、アクセス先のサーバからDoSとみなされてしまうかもしれません。実行する時は充分に注意して、少な目のアクセスで済むようにしましょう。どれぐらいが適正かどうか判断が付かないという方は、必ず周りの詳しい方に相談するようにしましょう。
2. アクセスログを確認しよう
実は、hosts設定をしているのを忘れてて全然違うホストにアクセスしてしまってたなんてこともあり得ます。テストの前には、まず少ない数のリクエストを投げて本当にアクセスが届いているかどうかをアクセスログを見て確認しましょう。
3. Document Length を確認しよう
abやってパフォーマンスすげーなんて感動してたら、実はアプリケーションエラー(パラメータ不足等)が発生してたというのは良くあるミスです。Document Length を必ず確認しましょう。
4. 動的ページに注意しよう
Document Length: 1421 bytes
Concurrency Level: 2
Time taken for tests: 0.022 seconds
Complete requests: 30
Failed requests: 0
上記は実行結果の一部です。実行結果の内、「Failed requests」の欄が0であることを必ず確認しましょう。0じゃない場合は、何かしらの問題があります。大した負荷をかけてないのに失敗し、何でだろう?ってなるケースは、リクエスト先が動的ページになっていて、レスポンスデータサイズが一定でないことがよくある例です。abは「Document Length」の値が一定であることをリクエスト成功の条件としていますので注意しましょう。
この他、abコマンドは意外と奥が深いので突き詰めていくと検証すべき要素が沢山あるのですが、まずは「色々なパラメータで叩いてみて、アクセスログを見て確認する」という動かして覚えることを実践するとよいと思います。