什么是 xhprof?
xhprof
是一个轻量级 PHP 性能分析工具。
它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU 时间和内存使用情况。
注意:xhprof 的使用开销很大,所以只能在本地开发调试的时候使用。
安装
我们可以通过 pecl
来安装 xhprof
:
1 | 目前最新版本是 2.3.9 |
安装完之后,运行一下 php -m
查看是否已经启用:
1 | php -m |
最后,修改一下 php.ini
配置文件,添加以下配置:
1 | xhprof.output_dir = /tmp/xhprof |
注意:这里指定的文件夹必须有写的权限才行。
当然,我们也可以通过源码编译安装,源码在 https://github.com/longxinH/xhprof。
使用
主要有两个步骤:
- 使用
xhprof_enable
来开启xhprof
性能监控
1 | xhprof_enable(XHPROF_FLAGS_NO_BUILTINS + |
- 注册一个
shutdown
处理器
它的作用是在 php
请求处理完毕的时候将性能指标数据写入到文件中,如果没有这个,则在
xhprof.output_dir
中将不会有任何输出。
1 | register_shutdown_function(function(){ |
通过 HTML 页面展示性能分析结果
- 我们在本地的
nginx
中添加一个xhprof
web 服务的配置:
1 | server { |
重启本地的 php-fpm
在我们的
/etc/hosts
中加上 nginx 中配置的域名即可
- 点击其中一个进去,可以看到详情
在这里,我们还能点击每一列的表头,让它按这一列来排序。上图我就按
Calls
逆序排序了。
以图的形式来展示
上面我们通过表格的方式来看到了函数调用的次数、时间等,但表格其实不够直观。
我们也看到上面图中的正中间有一个 View Full Callgraph
的超链接,我们可以通过这个超链接来查看具体的函数调用链,
这样我们可以更加直观的知道调用入口在哪里,以及整个调用链条大概长什么样子的。
图太大了,这里随便看看吧
注意:要使用这个功能,我们需要安一个插件
graphviz
。mac 下可以通过brew install graphviz
,其他的自行搜索。