phpアプリのプロファイリングを手っ取り早く行いたい時にとても重宝するXHProfを紹介します。対応するphpのバージョンは5.2.0以降です。
インストール
関数のCallグラフの表示にGraphvizを使いますので、入っていなければインストールしておきます。
XHProfはpeclでインストールできます。
1 |
$ sudo pecl install channel://pecl.php.net/xhprof-0.9.3 |
php.iniに以下の行を追加します。
1 |
extension=xhprof.so |
phpinfoでxhprofの項目が表示されればOKです。
プロファイリング
プロファイリングの開始位置と終了位置に以下のコードを入れることで、$dataにプロファイリングの結果が格納されます。
1 2 3 4 5 |
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY); // 開始 $data = xhprof_disable(); // 終了 |
結果データを表示
プロファイリング結果のデータを見やすい形に表示するためのツールが用意されています。
こちらからソースパッケージをダウンロードします。パッケージを解凍して、xhprof_htmlとxhprof_libというディレクトリをDocumentRoot下にxhprofというディレクトリを作ってその下にコピーします。
xhprof_disableで結果を得た後に以下のような表示用のコードを追加します。
1 2 3 4 5 6 7 |
$data = xhprof_disable(); require_once(dirname(__FILE__)."/xhprof/xhprof_lib/utils/xhprof_lib.php"); require_once(dirname(__FILE__)."/xhprof/xhprof_lib/utils/xhprof_runs.php"); $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($data, "xhprof_testing"); header("Location: http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n"); |
以下のような表示を得ることができます。この例ではfile_get_contents()の呼び出しが大きなボトルネックになっていることが一目瞭然です。
このようにとても簡単に問題となっている箇所を特定することができます。
おまけ
XHProfを使ったWordPressのプラグインもあります。このプラグインを組み込んで、WordPressをDebugモードで実行させるとページの一番下に”—-> Profiler output”というリンクが表示され、結果を確認できます。