xhprof与Xdebug的奇怪问题

  为了查找项目中比较耗性能的PHP代码,这两天在装xhprof用来跟踪代码,结果遇到了一个很奇怪的问题。安装配置好xhprof后,用来跟踪简单的代码没一点问题,但是在项目中一跟踪,PHP-FPM进程直接就挂了,查看各种日志,并且开了内核转储,折腾了半天也没找到挂了的原因。

  没办法,只好换Xdebug。安装,配置,很快就搞定了。

  在使用Xdebug前我突发奇想,不知道Xdebug能不能跟踪到xhprof导致PHP-FPM挂了的的问题,于是同时启用两者,结果意外地发现xhprof也能用了。为了证明是不是Xdebug导致xhprof可以用了,我禁用了Xdebug,xhprof又导致PHP-FPM挂了,重新启用又好了。

  真是好奇怪的问题,不知道是什么原因造成的,暂时也没时间深究了。

附Xhprof的安装与使用方法:

XML/HTML代码
  1. [root@localhost ~]# tar -zxvf xhprof-0.9.4.tgz     
  2. [root@localhost ~]# cd xhprof-0.9.4/extension/    
  3. [root@localhost extension]# phpize    
  4. [root@localhost extension]# ./configure –with-php-config=/usr/local/php/bin/php-config    
  5. [root@localhost extension]# make    
  6. [root@localhost extension]# make install  

如果phpize执行不了,请先安装或者做链接:ln -s /usr/local/php/bin/phpize /usr/bin/phpize

在php.ini文件中,添加如下配置:

XML/HTML代码
  1. [xhprof]    
  2. extension=xhprof.so;    
  3. ; directory used by default implementation of the iXHProfRuns    
  4. ; interface (namely, the XHProfRuns_Default class) for storing    
  5. ; XHProf runs.    
  6. ;    
  7. ;xhprof.output_dir=<directory_for_storing_xhprof_runs>    
  8. xhprof.output_dir=/tmp/xhprof    

把xhprof-0.9.4目录下的目录xhprof_html 和 xhprof_lib 下的所有文件拷贝到你网站的主目录下

PHP代码
  1. <?php    
  2. //cpu: XHPROF_FLAGS_CPU    
  3. //内存: XHPROF_FLAGS_MEMORY    
  4. //如果都监控用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY    
  5. xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);    
  6.     
  7. //这中间是需要性能分析的php代码  
  8.     
  9. //停止性能分析    
  10. $data = xhprof_disable();     
  11.   
  12. //显示性能分析数据    
  13. include_once "xhprof_lib/utils/xhprof_lib.php";     
  14. include_once "xhprof_lib/utils/xhprof_runs.php";     
  15. $objXhprofRun = new XHProfRuns_Default();     
  16.   
  17. //第一个参数 是xhprof_disable()的返回值    
  18. //第二个参数 是自定义命名空间字符串     
  19. //返回运行id,用这个id查看相关运行结果    
  20. $run_id = $objXhprofRun->save_run($data"xhprof");    
  21.   
  22. //查看运行结果的url    
  23. //run的值来源于save_run的返回值    
  24. //source值来源于save_run的第二个参数                                     
  25. //www.abc.com 需要用自己的域名替换    
  26. echo "<a href='http://www.abc.com/xhprof_html/index.php?run=".$run_id."&source=xhprof'>查看结果</a>";  

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注