PHP性能分析工具xhprof的安装使用与注意事项


Posted in PHP onDecember 19, 2017

前言

xhprof由facebook开源出来的一个PHP性能监控工具,占用资源很少,甚至能够在生产环境中进行部署。

它可以结合graphviz使用,能够以图片的形式很直观的展示代码执行耗时。

下面主要讲一下安装和使用过程

1、安装

(1)下载和解压

wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar zxvf xhprof-0.9.4.tgz

(2)编译和运行

cd xhprof-0.9.4/extension/
phpize //此语句编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件,一般存放在/usr/local/php/bin/目录下
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
mkdir /tmp/xhprof

(3)编辑php.ini:

[xhprof]
extension = xhprof.so
xhprof.output_dir=/tmp/xhprof

xhprof.output_dir是分析生成日志的保存路径

(4)安装插件

最后返回数组,就表示安装好了。具体哪些值是什么意思先别管,因为下面有UI的配置。会很直观!

yum -y install libjpeg freetype freetype-devel libjpeg-devel liberation-sans-fonts.noarch

自动安装

yum -y install graphviz

(5)插入代码

//找到你要分析的代码,在代码开始处添加,start profiling,将会统计内存占用情况
xhprof_enable(XHPROF_FLAGS_MEMORY);
//具体代码
//在代码结束位置添加
$xhprof_data = xhprof_disable(); // stop profiler, display raw xhprof data for the profiler run
include_once ("/usr/local/src/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"); # 请注意设置站点 include_path 权限
include_once ("/usr/local/src/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php");
$xhprof_runs = new \XHProfRuns_Default();
// Save the run under a namespace "xhprof_foo".
// **NOTE**:
// By default save_run() will automatically generate a unique
// run id for you. [You can override that behavior by passing
// a run id (optional arg) to the save_run() method instead.]
$xhprof_runs->save_run($xhprof_data, "xhprof_foo");

(6)查看

给(2)中的xhprof-0.9.4/xhprof_html 配置一个可以访问的站点,可以简洁的使用php内置的server

cd xhprof-0.9.4/xhprof_html
php -S 0.0.0.0:8990

然后访问ip+端口就可以报告了。

2、使用说明

  • Function Name:方法名称。
  • Calls:方法被调用的次数。
  • Calls%:方法调用次数在同级方法总数调用次数中所占的百分比。
  • Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间。(单位:微秒)
  • IWall%:方法执行花费的时间百分比。
  • Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)
  • EWall%:方法本身执行花费的时间百分比。
  • Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)
  • ICpu%:方法执行花费的CPU时间百分比。
  • Excl. CPU(microsec):方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位:微秒)
  • ECPU%:方法本身执行花费的CPU时间百分比。
  • Incl.MemUse(bytes):方法执行占用的内存,包括子方法执行占用的内存。(单位:字节)
  • IMemUse%:方法执行占用的内存百分比。
  • Excl.MemUse(bytes):方法本身执行占用的内存,不包括子方法执行占用的内存。(单位:字节)
  • EMemUse%:方法本身执行占用的内存百分比。
  • Incl.PeakMemUse(bytes):Incl.MemUse峰值。(单位:字节)
  • IPeakMemUse%:Incl.MemUse峰值百分比。
  • Excl.PeakMemUse(bytes):Excl.MemUse峰值。单位:(字节)
  • EPeakMemUse%:Excl.MemUse峰值百分比。

注意:

      1、在正式启用前,一定要确认不会影响正常的数据输出。确认输出内容无异后,再上线。

      2、每个url的max_time不要设置的过小。

      3、xhprof会影响线上服务的性能,因此最好只在一台机器上进行监控,或者 修改xhprof.php代码,对请求进行随机监控。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
php数组查找函数总结
Nov 18 PHP
WordPress自定义时间显示格式
Mar 27 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
学习PHP Cookie处理函数
Aug 09 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 PHP
PHP实现的最大正向匹配算法示例
Dec 19 #PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 #PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
You might like
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php实现微信发红包功能
2018/07/13 PHP
HTML上传控件取消选择
2013/03/06 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python爬虫爬取网页表格数据
2018/03/07 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
python多线程实现TCP服务端
2019/09/03 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
调研座谈会发言材料
2014/08/23 职场文书
golang中的空接口使用详解
2021/03/30 Python
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
java开发双人五子棋游戏
2022/05/06 Java/Android