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中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
php制作动态随机验证码
Feb 12 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
php简单检测404页面的方法示例
Aug 23 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
php SQL Injection with MySQL
2011/02/27 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
阿拉伯书店:Jamalon
2019/07/24 全球购物
简述数组与指针的区别
2014/01/02 面试题
教师实习期自我鉴定
2013/10/06 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
群众路线党课主持词
2014/04/01 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
出国留学自荐信模板
2015/03/06 职场文书
公司地址变更通知
2015/04/25 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB