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将向Java靠拢
Oct 09 PHP
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
PHP实现的最大正向匹配算法示例
Dec 19 #PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 #PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
实用函数3
2007/11/08 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
js 获取radio按钮值的实例
2013/08/17 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
在vue组件中使用axios的方法
2018/03/16 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
高中毕业自我鉴定
2013/12/16 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
Go 自定义package包设置与导入操作
2021/05/06 Golang
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL