PHPのプロファイリング

Gitからソースを取得

git clone https://github.com/facebook/xhprof.git

コンパイル

cd xhprof/extension/
phpize
./configure
make
sudo make install

モジュールの追加

sudo vi /etc/php5/conf.d/xhprof.ini
; configuration for php XHprof module
extension=xhprof.so
xhprof.output_dir="/var/www/xhprof.sheeps.me/log"

コールグラフ生成用ツールのインストール

sudo aptitude -y install graphviz

Webインターフェースの設定

cp -f xhprof/xhprof_html/ /var/www/xhprof

xhprof_htmlの中身を閲覧できるように設定

XHProfの実行サンプル
[php]
<?php
function bar($x) {
if ($x > 0) {
bar($x – 1);
}
}

function foo() {
for ($idx = 0; $idx < 5; $idx++) {
bar($idx);
$x = strlen("abc");
}
}

// start profiling
xhprof_enable();

// run program
foo();

// stop profiler
$xhprof_data = xhprof_disable();

// display raw xhprof data for the profiler run
print_r($xhprof_data);

$XHPROF_ROOT = realpath(dirname(__FILE__) .’/..’);
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// save raw data for this profiler run using default
// implementation of iXHProfRuns.
$xhprof_runs = new XHProfRuns_Default();

// save the run under a namespace "xhprof_foo"
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "—————\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
"—————\n";
?>
[/php]

Posted in php.

Leave a reply