xhprof でコールグラフを書く。
phpでコールグラフ付きのプロファイルを撮りたかったので、xhprof入れた。
これも facebookの人が作ったプロダクト。facebookすごいなー。
pecl で入りそうなんだけど、peclでは入らないw
ソースからダウンロードしていれてみる。
#ここのサイトから最新版をダウンロードする。 #http://pecl.php.net/package/xhprof wget http://pecl.php.net/package/xhprof/0.9.2 #解凍して、、 tar zxvf xhprof-0.9.2.tgz cd xhprof-0.9.2/extension/ #phpize ./configure make make install phpzie ./configure make make install #一つ上の階層にあるプロファイル結果画面をインストール. #どこに入れればいいかわからんので、 /usr/local/share とかに適当に。 cd .. mv xhprof_html /usr/local/share mv xhprof_lib /usr/local/share htmlの方は webroot以下にシンボリックリンクでも貼る。 ln -s /usr/local/share/xhprof_html /var/www/html/xhprof_html ここまでで、エラーがでたよ!!って人 エラー1. -bash: phpize: command not found phizieが入っとらん。 yum install php-devel or remi から最新版を使っている人は、 yum --enablerepo=remi install php-devel エラー2 >Cannot find config.m4. >Make sure that you run '/usr/bin/phpize' in the top level source directory of the module ちゃんと以下のディレクトリに移動しましたか? extension に入っていないとか、、せっかちさんだ。 cd xhprof-0.9.2/extension/ phpに組み込むよ! vi /etc/php.d/xhprof.ini ----------------------------- extension=xhprof.so ----------------------------- httpd を再起動するよ。 /etc/init.d/httpd restart
うまく認識していない人は、インストールからやり直してね!
次!
プロファイルを開始するところと、プロファイル結果をストアしたいところにコードを埋めるよ。
<?php //プロファイル開始 xhprof_enable(); include("../lib/etc/config.php"); include("../lib/l/l.php"); //sinatra風のフレームワーク作ってる。 L_AppGet("/",function(){ echo "/ !!"; L_LoadTPL("index.tpl"); //プロファイル結果を取得. $xhprof_data = xhprof_disable(); //xhprofをインストールしたディレクトリ $XHPROF_ROOT = '/usr/local/share'; $XHPROF_SOURCE_NAME = 'lphp'; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, $XHPROF_SOURCE_NAME); //ここを踏むと結果を表示する echo "<a href=\"/xhprof/index.php?run=$run_id&source=$XHPROF_SOURCE_NAME\">xhprof Result</a>\n"; });
プロファイルを開始したいところに
xhprof_enable();
プロファイルを終了して結果を取り出すところ
ソースはから。
//プロファイル結果を取得. $xhprof_data = xhprof_disable(); //xhprofをインストールしたディレクトリ $XHPROF_ROOT = '/usr/local/share'; $XHPROF_SOURCE_NAME = 'lphp'; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, $XHPROF_SOURCE_NAME); //ここを踏むと結果を表示する echo "<a href=\"/xhprof/index.php?run=$run_id&source=$XHPROF_SOURCE_NAME\">xhprof Result</a>\n";
はい、結果を見てみましょう。
なんかリンクが表示されました。
xhprof Resultをクリックすると、
リンクをクリックすると、プロファイル結果が見れます。
うまくいってます。
コールグラフ見てみましょう。
View Full CallGraphをクリックするとー
コールグルフが表示されません、、、あれー?
Error: either we can not find profile data for run_id 4d44d5bec1892 or the threshold 0.01 is too small or you do not have 'dot' image generation utility installed.
グラフを書くには、graphviz が必要らしい。
とりあえずそれっぽいものを入れる。
#graphvizだけでいいと思うけど、一応入れるだけ入れてみる。
yum --enablerepo=remi install graphviz graphviz-devel graphviz-gd graphviz-php