PHP性能分析工具XHProf安装使用教程


Posted in PHP onMay 13, 2015

HProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开关来控制是否进行profile。基于浏览

器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。在数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。

它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。

XHProf的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计。

1. 安装XHProf

wget http://pecl.php.net/get/xhprof-0.9.2.tgz 

tar zxf xhprof-0.9.2.tgz 

cd xhprof-0.9.2 

cp -r xhprof_html xhprof_lib <directory_for_htdocs> 

cd extension 

phpize 

./configure 

make 

make install

2. 配置 php.ini 文件

[xhprof] 

extension=xhprof.so 

; 

; directory used by default implementation of the iXHProfRuns 

; interface (namely, the XHProfRuns_Default class) for storing 

; XHProf runs. 

; 记得<directory_for_storing_xhprof_runs>WEB要有写入权限 

xhprof.output_dir=<directory_for_storing_xhprof_runs>

重启服务让修改生效,现在就可以使用XHProf了,不过为了显示效果更炫,最好继续安装Graphviz。

3. 安装Graphviz

wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.26.3.tar.gz   

tar zxf graphviz-2.26.3.tar.gz    

cd graphviz-2.26.3   

./configure 

make    

make install

安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。

4. 应用XHProf

xhprof_enable();//打开xhprof
/******程序逻辑 Start******/

function test1(){

 sleep(3);

 return;

}

function test2(){

 test1();

}

function test3(){

 test2();

}

function p(){

 echo '<h3>xhprof test</h3>';

}

p();

test3();

/******程序逻辑 End******/
$xhprof_data = xhprof_disable();//关闭xhprof
//保存xhprof数据

include_once '../xhprof_lib/utils/xhprof_lib.php';

include_once '../xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new XHProfRuns_Default();

$xhprof_source = 'xhprof_test';

$run_id = $xhprof_runs->save_run($xhprof_data, $xhprof_source);

$report_url = 'http://xhprof.rebill.info/index.php?run='.$run_id.'&source='.$xhprof_source;

echo '<br>';

echo 'view the performance report:<a href="'.$report_url.'" target="_blank">'.$report_url.'</a>';

如此一来,会在上面设定的xhprof.output_dir目录里生成名字类似4c236583ef490.xhprof_test的数据文件,可以很方便的通过Web方式浏览效果:
http://xhprof.rebill.info/index.php?run=4c236583ef490&source=xhprof_test

目前显示的是表格形式的显示,点击页面上的[View Full Callgraph],就能看到精美的图片显示了。

在线测试体验地址:http://xhprof.rebill.info/test.php

PHP 相关文章推荐
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
php验证手机号码
Nov 11 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
php 流程控制switch的简单实例
Jun 07 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
PHP implode()函数用法讲解
Mar 08 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
PHP CURL 多线程操作代码实例
May 13 #PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 #PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 #PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 #PHP
PHP版本如何选择?应该使用哪个版本?
May 13 #PHP
PHP Hash算法:Times33算法代码实例
May 13 #PHP
你应该知道PHP浮点数知识
May 13 #PHP
You might like
destoon设置自定义搜索的方法
2014/06/21 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
jquery 学习之一 对象访问
2010/11/23 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
浅谈js中的闭包
2015/03/16 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
浅谈js中的this问题
2017/08/31 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
200行自定义python异步非阻塞Web框架
2017/03/15 Python
python字典快速保存于读取的方法
2018/03/23 Python
python 接口返回的json字符串实例
2018/03/27 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
介绍一下JNDI的基本概念
2013/07/26 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
西门豹教学反思
2014/02/04 职场文书
三八节标语
2014/06/27 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers