博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XHProf-php轻量级的性能分析工具
阅读量:4089 次
发布时间:2019-05-25

本文共 1815 字,大约阅读时间需要 6 分钟。

文章作者: 转载请注明原文链接。
下载了北京PHP爱好者 2010聚会的一些PPT,有几个ppt很给力,也感叹厦门的PHP聚会的水准和分享氛围比北京还是差非常多D。
其中有一篇野马分享的《PHP性能检测扩展——XHProf》,不错,之前就有听说,这次就行动一下。
XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。
以下是记录和总结:
安装xhprof
wget
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib /www/www.hx.com/xhprof/
cd extension/
/usr/local/webserver/php/bin/phpize
./configure  –with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
安装完提示:
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/
php.ini中添加
extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
这句我原来就有了,就这用添加下面两句
extension=xhprof.so
xhprof.output_dir=/www/logs/xhprof
分析日志输出在/www/logs/xhprof目录。
重新加载php配置文件和重启web
/usr/local/webserver/php/sbin/php-fpm reload
/usr/local/webserver/nginx/sbin/nginx -s reload
刷新phpinfo页面,看到输出中有了xhprof信息。
xhprof  0.9.2
CPU num  2
安装graphviz,一个画图工具
wget
tar zxf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make && make install
程序试例
头部:
xhprof_enable();
//xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数
//xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);  同时分析CPU和Mem的开销
$xhprof_on = true;
我觉得用xhprof_enable();就够用了,只统计运行时间(Wall Time)。
生产环境可使用:
if (mt_rand(1, 10000) == 1) {
   xhprof_enable();
   $xhprof_on = true;
}
尾部:
if($xhprof_on){
$xhprof_data = xhprof_disable();
$xhprof_root = '/www/www.hx.com/xhprof/';
include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "hx");
echo '<a href=" target="_blank">统计</a>';
}
运行程序,底部出现统计字样,点过去就可以看到性能分析了。按运行时间排序,很容易找出化时间最长的函数。
点[View Full Callgraph]图形化显示,最大的性能问题会用红色标出,其次是黄色,很明显。
官方文档:

你可能感兴趣的文章
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>