调试PHP时,XDebug一直是大众的不二选择,搭配上Webgrind,可以获得不错的效果。今天看某人的栖息地里的介绍,才发现了XHProf,于是体验了一下,感觉很酷,与XDebug相比,运行更轻便(本身还包括一个web查看工具),表现更易懂,下面记录一下体验过程。
1.安装XHProf
-
wget 0.9.2.tgz
-
tar zxf xhprof-0.9.2.tgz
-
cd xhprof-0.9.2
-
cp -r xhprof_html xhprof_lib
-
cd extension
-
phpize
-
./configure
-
make
-
make install
2 . 配置php.ini
-
[xhprof]
-
extension=xhprof.so
-
;
-
; directory used by default implementation of the iXHProfRuns
-
; interface (namely, the XHProfRuns_Default class) for storing
-
; XHProf runs.
-
;
-
xhprof.output_dir=
重启服务让修改生效,现在就可以使用XHProf了,不过为了显示效果更炫,最好继续安装Graphviz。
3. 安装Graphviz
-
wget http:///pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
-
tar zxf graphviz-2.24.0.tar.gz
-
cd graphviz-2.24.0
-
./configure
-
make
-
make install
安装Graphviz的目的是为了xhprof图形化web工具查看profiling log文件。安装后使用web工具查看log图形时,最常见错误是:
提示如下:
引用
Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have ‘dot’ image generation utility installed.
且编译graphviz提示信息png: No (missing png.h),也就是dot 不支持PNG,所以需要安装libpng包,如:
-
wget 1.5.1/libpng-1.5.1.tar.gz
-
tar zxf libpng-1.5.1.tar.gz
-
cd libpng-1.5.1
-
./configure
-
make
-
make install
然后重新编译安装graphviz,加上参数--with-png=yes。完成后,应确保命令dot在PATH环境变量里(默认应该就在路径里,一般不需要特别设置),以便XHProf能找到它。
使用XHProf
在你要监测的Php代码头尾部分别加入代码xhprof_enable()和xhprof_disable()
-
-
xhprof_enable();
-
-
....
-
-
$xhprof_data = xhprof_disable();
-
-
-
-
-
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_foo");
-
-
echo "---------------\n".
-
"Assuming you have set up the http based UI for \n".
-
"XHProf at some address, you can view run at \n".
-
"\n".
-
"---------------\n";
如此一来,会在上面设定的xhprof.output_dir目录里生成名字类似49bafaa3a3f66.xhprof_foo的数据文件,可以很方便的通过Web方式浏览效果:
目前显示的是表格形式的显示,点击页面上的[View Full Callgraph],就能看到精美的图片显示了。看看下面的screenshot.