チップス

Abコマンドを使ったウェブアプリケーションのパフォーマンス計測


apache-150x150Abコマンドを使ったウェブアプリケーションのパフォーマンス計測 @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 として保存


   チップス