XHProf 導入メモ

ここ数ヶ月、 OpenPNE 3 を使ったサービスのパフォーマンスチューニングにかなりの時間を割いていました。

各所でも言っているとおり、 OpenPNE 3 は OpenPNE 2 に比べて DB 側のコストが低い代わりに Web サーバ側の負荷が高いのが問題になっています。DB 側に比べて PHP スクリプト側のチューニングは経験がなかったので、最初のほうはボトルネック分析の手法から模索していました。

そこで、 PHP スクリプトのボトルネックを洗い出すのに導入したのが XHProf でした。 Xdebug でプロファイリングを取って、そのプロファイル結果を KCacheGrind で分析するのが一般的だと思いますが、どこでメモリを過剰に消費しているかとか、 CPU 時間と実時間を区別して計測できないらしいというのがどうにも不満だったのです。

XHProf は以下のページで PECL 拡張として提供されています。
http://pecl.php.net/package/xhprof

Xdebug と違い、プロファイルを取るためにはスクリプト側で明示的にプロファイリングの開始と終了をしなければいけません。ただ、言い換えれば必要なときだけプロファイルがおこなわれるということなので、拡張を導入しっぱなしでも、プロファイルをおこなわなければ PHP スクリプトの実行時間には影響しませんし、プロファイル結果のファイルでディスクスペースを消費するということもありません。個人的にはこれはメリットだなと感じました。 OpenPNE のように symfony 製アプリであれば、プロファイル用のフロントコントローラを一個作っておけば気軽にプロファイルが取れるので、あまり不便に感じることもありませんでした。

本当は XHProf の詳細な使い方なども説明したかったのですが、なかなか時間が取れずに既に半年が経っているので、以前書いた導入用のドキュメントだけでも示しておきます。
http://gist.github.com/458621

時間が取れれば、いままで OpenPNE 3 や その他でおこなったチューニングの情報なども小出しにしていきたいと思います! たぶん年内には!

comments powered by Disqus

Recently entries