PHP7環境でXHProf導入
2016年 08月 26日

XHProfとは
セットアップ
環境
xhprofのインストール(php7対応)
$ git clone git@github.com:Yaoguais/phpng-xhprof.git ./xhprof
$ cd xhprof
$ phpize
$ ./configure
$ make clean && make && make test && sudo make install
/etc/php/7.0/fpm/conf.d/xhprof.ini
[xhprof]
extension = phpng_xhprof.so
xhprof.output_dir = /tmp/xhprof
xhprof付属の表示ツールのインストール
$ composer require facebook/xhprof dev-master
composerでインストールされたライブラリの構造上、ドキュメントルートから読み込こめるようにします。
$ ln -s vendor/facebook/xhprof/xhprof_lib/ public/xhprof_lib
$ ln -s vendor/facebook/xhprof/xhprof_html/ public/xhprof_html
必須ではありませんがコールグラフ生成にはgraphvizが必要です。
$ apt-get install graphviz
プロファイリング
計測
xhprof_enable(); //計測開始
//メイン処理
$xhprofData = xhprof_disable(); //計測終了
$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData,'myapp');
この時点で正しく動いていれば設定したxhprof.output_dirに結果が保存されます。
結果表示
今回はプロファイリング結果を元にしたボトルネック調査方法までは記載していませんが
実際のサービスで解析した結果ではループ処理内で不必要な関数呼び出しを最適化しただけで大幅なパフォーマンス改善ができました。
xhprofは拡張を導入しただけでは全体のシステムの実行時間に影響はおこらず、明示的に計測開始と終了を記述することで解析が行えます。そのため特定条件のみに解析、複数人利用している開発環境でも柔軟に解析が行えます。
是非、パフォーマンスチューニング時にはお試しください。