为了查找项目中比较耗性能的PHP代码,这两天在装xhprof用来跟踪代码,结果遇到了一个很奇怪的问题。安装配置好xhprof后,用来跟踪简单的代码没一点问题,但是在项目中一跟踪,PHP-FPM进程直接就挂了,查看各种日志,并且开了内核转储,折腾了半天也没找到挂了的原因。
没办法,只好换Xdebug。安装,配置,很快就搞定了。
在使用Xdebug前我突发奇想,不知道Xdebug能不能跟踪到xhprof导致PHP-FPM挂了的的问题,于是同时启用两者,结果意外地发现xhprof也能用了。为了证明是不是Xdebug导致xhprof可以用了,我禁用了Xdebug,xhprof又导致PHP-FPM挂了,重新启用又好了。
真是好奇怪的问题,不知道是什么原因造成的,暂时也没时间深究了。
附Xhprof的安装与使用方法:
XML/HTML代码
- [root@localhost ~]# tar -zxvf xhprof-0.9.4.tgz
- [root@localhost ~]# cd xhprof-0.9.4/extension/
- [root@localhost extension]# phpize
- [root@localhost extension]# ./configure –with-php-config=/usr/local/php/bin/php-config
- [root@localhost extension]# make
- [root@localhost extension]# make install
如果phpize执行不了,请先安装或者做链接:ln -s /usr/local/php/bin/phpize /usr/bin/phpize
在php.ini文件中,添加如下配置:
XML/HTML代码
- [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=<directory_for_storing_xhprof_runs>
- xhprof.output_dir=/tmp/xhprof
把xhprof-0.9.4目录下的目录xhprof_html 和 xhprof_lib 下的所有文件拷贝到你网站的主目录下
PHP代码
- <?php
- //cpu: XHPROF_FLAGS_CPU
- //内存: XHPROF_FLAGS_MEMORY
- //如果都监控用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
- xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
- //这中间是需要性能分析的php代码
- //停止性能分析
- $data = xhprof_disable();
- //显示性能分析数据
- include_once "xhprof_lib/utils/xhprof_lib.php";
- include_once "xhprof_lib/utils/xhprof_runs.php";
- $objXhprofRun = new XHProfRuns_Default();
- //第一个参数 是xhprof_disable()的返回值
- //第二个参数 是自定义命名空间字符串
- //返回运行id,用这个id查看相关运行结果
- $run_id = $objXhprofRun->save_run($data, "xhprof");
- //查看运行结果的url
- //run的值来源于save_run的返回值
- //source值来源于save_run的第二个参数
- //www.abc.com 需要用自己的域名替换
- echo "<a href='http://www.abc.com/xhprof_html/index.php?run=".$run_id."&source=xhprof'>查看结果</a>";