Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測 @hidenorigoto / 後藤 秀宣 より
abコマンドとは
ab = Apache Bench
Apacheに付属のベンチマークツール(コマンド)
・特定のURLに関するパフォーマンスを手軽に計測できる
参考URL
・http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15b.html
XAMPPなどをWindowsにインストールすると、Windows上からも利用可能
abコマンドの使用例
ab -c 40 -n 40 http://blog.innx.co.jp/
abコマンドの実行結果(1)
Server Software: Apache/2.2.3
Server Hostname: blog.innx.co.jp
Server Port: 80
Document Path: /
Document Length: 47837 bytes
サーバーのバージョンやレスポンスの情報
abコマンドの実行結果(2)
Concurrency Level: 40
Time taken for tests: 0.957 seconds
Complete requests: 40
Failed requests: 0
Write errors: 0
Total transferred: 1926080 bytes
HTML transferred: 1913480 bytes
Requests per second: 41.79 [#/sec] (mean)
Time per request: 957.055 [ms] (mean)
Time per request: 23.926 [ms] (mean, across all concurrent request
Transfer rate: 1965.34 [Kbytes/sec] received
abコマンドの実行結果(3)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.5 1 1
Processing: 182 597 225.2 623 932
Waiting: 109 556 229.8 595 916
Total: 183 597 225.1 623 932
この例ではLAN内で実行しているのでConnectはほぼゼロ
abコマンドの結果、その他の参考値
ローカルPC上のApache
スタティックなページ
Requests per second: 5681.10 [#/sec] (mean)
phpinfoだけのページ
Requests per second: 1171.15 [#/sec] (mean)
cakephpブログチュートリアル
Requests per second: 47.08 [#/sec] (mean)
シンプルなPHPでスタティックなページの5倍
DB接続のある複雑なPHPで100~200倍
ウェブアプリケーションのチューニング
1. プログラムの処理時間を短くする
→(様々なノウハウ)
→サーバー側ページキャッシュ
2. プログラムへのアクセス回数を減らす
→クライアント側ページキャッシュ
3. 画像ファイルなどのリソースへのリクエストを減らす
→CSSスプライト、クライアント側キャッシュ
Apache側の設定のポイント(1)
httpd.conf
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
上記はデフォルト設定。MaxClients(=ServerLimit)は許可するメモリ量に応じて設定する。
プロセスを頻繁に初期化したい場合はMaxRequestsPerChildを小さくする。(PHPのメモリリーク対策など)
Apache側の設定のポイント(2)
mod_expires
http://httpd.apache.org/docs/2.0/mod/mod_expires.html
画像ファイルなどのキャッシュ期間を制御
→サーバーへのリクエストが減るだけでなく、クライアント側のページ表示速度も改善する場合がある
プログラム側での対応
・APC(PHPの場合)
・データベース処理の最適化
・サーバー側ページキャッシュ
→少なくともファイルキャッシュ、頻度の高いページはメモリキャッシュ
PHPの場合APCをインストールすれば、メモリKVSがすぐに使える
memcachedでもOK
1.URLをキーにしてページデータを格納
2.キー(URL)に対応するページデータがあれば、取得して返す
サーバ/(Documents)/ab-100421104940-phpapp01.odp として保存