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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
模拟flock实现文件锁定
Feb 14 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP实现的增强性mhash函数
May 27 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 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下批量挂马和批量清马代码
2011/02/27 PHP
如何判断php数组的维度
2013/06/10 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
浅谈webpack对样式的处理
2018/01/05 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python集合是否可变总结
2019/06/20 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Python如何将函数值赋给变量
2020/04/28 Python
创建精神文明单位实施方案
2014/03/08 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
酒店员工培训方案
2014/06/02 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Python基础之变量的相关知识总结
2021/06/23 Python
vue3不同环境下实现配置代理
2022/05/25 Vue.js
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
box-shadow单边阴影的实现
2023/05/21 HTML / CSS