PHP XHProf 性能分析工具安装和基本使用生成性能图(Graphviz)实践
一、XHProf简介
XHProf是一个轻量级的PHP性能分析工具,可以分析函数级别的请求次数和各种指标,包括CPU、内存、负载等。 与Xdebug相比,XHProf更加易用和可控,尤其是生成流程图和调试数据对比的功能很好很强大。
XHProf 这也是官方力荐的性能分析工具。
https://www.php.net/manual/zh/book.xhprof.php
二、环境准备
1. 安装XHProf
方法一:通过PECL安装(推荐)
1 | # 安装PHP开发工具 |
方法二:源码编译安装
1 | # 下载源码 |
2. 配置PHP
编辑php.ini文件,添加以下配置:
1 | [xhprof] |
创建输出目录:
1 | sudo mkdir -p /tmp/xhprof |
重启PHP服务:
1 | # PHP-FPM |
三、安装Graphviz(生成性能图必备)
Graphviz是一个图形可视化软件包,可以让XHProf以图片的形式很直观地展示代码执行耗时。
CentOS/RHEL系统
1 | sudo yum install graphviz |
Ubuntu/Debian系统
1 | sudo apt-get install graphviz |
源码编译安装(可选)
1 | wget https://graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz |
安装完成后,会生成/usr/local/bin/dot文件,需要确保该路径在PATH环境变量里,以便XHProf能找到它。
四、XHProf使用示例
1. 基本使用
在需要分析的PHP文件开头添加:
1 |
|
2. 创建分析报告页面
创建xhprof_html/index.php文件:
1 |
|
五、生成性能图
1. 配置Graphviz路径
确保XHProf能正确找到Graphviz的dot命令。通常需要在xhprof_lib/utils/config.php中设置:
1 | // 设置dot命令路径 |
2. 生成调用图
访问分析报告页面后,点击”View Full Callgraph”链接,XHProf会自动调用Graphviz生成调用图。
XHProf是可以使用graphviz生成图片的,这样分析的php程序运行过程更加直观。
六、高级配置
1. 忽略内置函数
1 | xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY, array('ignored_functions' => array('call_user_func', 'call_user_func_array'))); |
2. 设置采样率(生产环境推荐,因存在性能开销,更推荐测试环境部署或预发布环境使用)
1 | // 1%的请求进行性能分析 |
七、常见问题解决
1. 权限问题
确保/tmp/xhprof目录对PHP进程有写权限:
1 | sudo chown -R www-data:www-data /tmp/xhprof # Ubuntu/Debian |
2. Graphviz路径问题
如果无法生成图片,检查dot命令路径:
1 | which dot |
3. PHP版本兼容性
XHProf对不同PHP版本的兼容性:
- PHP 5.x: 使用官方XHProf
- PHP 7.x: 使用Tideways或XHProf fork版本
- PHP 8.x: 推荐使用Tideways
八、验证安装
创建一个测试文件test_xhprof.php:
1 |
|
最后访问该文件,如果看到成功消息,说明安装配置正确。
通过以上步骤,您已经成功安装了XHProf性能分析工具,并配置了Graphviz来生成直观的性能分析图表,可以开始对PHP应用进行性能优化了。
借助 XHProf 可以实现更精细的性能诊断和优化。
查看XHProf历史报告或者指定某个ID报告的方式
1. 基本访问方式
- 查看XHProf的历史报告,首先需要将XHProf的Web界面文件部署到Web服务器上。
- XHProf自带一个web查看工具,位于扩展源码的压缩包里,是一些php代码。
部署Web界面
- 将XHProf源码包中的
xhprof_html和xhprof_lib目录复制到Web服务器的根目录下 - 确保Web服务器对该目录有读取权限
访问报告列表 ( 域名以wdft.com为例 )
访问以下URL即可查看所有历史分析报告:
1 | https://wdft.com/xhprof_html/ |
或
1 | https://wdft.com.com/xhprof/xhprof_html/index.php |
通过浏览器访问该URL,即可看到xhprof分析结果文件列表,点击任意一个报告可以查看详情。
2. 查看具体报告
查看单个报告
在报告列表页面,点击任意一个报告文件(格式通常为 xxxxxxx.test.xhprof),其中xxxxxxx就是报告ID($run_id)。
访问格式:
https://wdft.com.com/xhprof_html/index.php?run=```[报告ID]```&source=```[命名空间]```
1 | # 例:https://wdft.com.com/xhprof_html/index.php?run=[ID]&source=test |
查看调用关系图
在报告详情页面,点击 [View Full Callgraph] 按钮,即可查看以图片形式展示的函数调用关系图。
如果无法生成调用图,需要先安装graphviz:
1 | yum install graphviz # CentOS/RHEL |
3. 直接访问指定报告
如果你知道具体的报告ID和命名空间,可以直接通过URL访问指定报告:
1 | https://your-domain.com/xhprof_html/index.php?run=12345&source=yourapp |
其中:
run参数是报告的唯一IDsource参数是命名空间(通常是你在保存报告时指定的)
4. 高级功能
差异对比报告
XHProf支持对多个结果进行差异对比或者汇总,这对性能优化非常有帮助。
访问格式:
1 | https://your-domain.com/xhprof_html/index.php?run1=报告ID1&run2=报告ID2&source=命名空间 |
通过代码生成报告URL
你可以在PHP代码中生成报告查看链接:
1 | $run_id = '12345'; // 你的报告ID |
5. 常见问题解决
404错误
- 检查
xhprof_html目录是否正确放置在Web根目录下 - 确认Web服务器配置是否正确
权限问题
- 确保Web服务器用户对
xhprof.output_dir配置的目录有读写权限 - 检查
xhprof_lib目录的权限设置
无法生成调用图
- 确认Graphviz已正确安装
- 检查XHProf配置中是否指定了正确的dot命令路径
通过浏览器中访问xhprof_html目录下的index.php路径,就可以看到所有访问页面的分析数据,点击其中一条数据的链接,会看到整个访问的详细分析数据。
小结
借助 XHProf + Graphviz 工具可以直观了解代码运行的逻辑和性能,也是团队CodeReview的利器。
PHP XHProf 性能分析工具安装和基本使用生成性能图(Graphviz)实践


