使用 XHProf 进行 PHP 查询性能分析和问题追踪
文章目录
XHProf
是facebook开源出来的一个PHP轻量级的性能分析工具,跟Xdebug
类似,但性能开销更低,还可以用在生产环境中,也可以由程序开关来控制是否进行profile。
安装
-
macOS
1 2
brew search xhprof brew install php56-xhprof
-
编译
1 2 3 4 5 6 7 8
wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar -zxvf xhprof-0.9.4.tgz cd xhprof-0.9.4 cd extension/ phpize ./configure make sudo make install
1 2 3
[xhprof] extension=xhprof.so xhprof.output_dir=/tmp
-
依赖
可视化分析图功能需要安装
graphviz
库,否则会报如下错误:failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '
yum install graphviz
或brew install graphviz
进行安装
使用
开启性能分析
void xhprof_enable ([ int $flags = 0 [, array $options ]] )
-
flags
该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。-
XHPROF_FLAGS_NO_BUILTINS
跳过所有的内置函数 -
XHPROF_FLAGS_CPU
添加对CPU使用的分析 -
XHPROF_FLAGS_MEMORY
添加对内存使用的分析
-
-
options
数组形式提供可选参数,在此处提供ignored_functions
选项需要忽略的函数
结束性能分析
array xhprof_disable ( void )
示例代码
将xhprof
源码包下的xhprof_lib
和xhprof_html
拷贝到项目目录下
|
|
但是这样免不了要修改项目的源代码,其实php本身就提供了更好的注入方式,比如将上述逻辑保存为/opt/inject.php
,然后修改php.ini
配置文件
|
|
这样所有的php-fpm请求的php文件前都会自动注入/opt/inject.php
文件
如果使用Nginx的话,还可以通过Nginx的配置文件设置,这样侵入性更小,并且可以实现基于站点的注入。
|
|
浏览器中访问xhprof_html
目录下的index.php
路径,就可以看到所有访问页面的分析数据:
点击其中一条数据的链接,会看到整个访问的详细分析数据:
我们可以在分析页面中看到包含内置函数、CPU、内存、调用次数、执行顺序等相关的信息,以及整个 PHP 程序周期内的所有链路信息。
点击[View Full Callgraph]
,则会展示一张程序执行堆栈图:
堆栈图中,最粗的那条主线代表了耗用资源最多的地方,值得我们关注和分析是否在这些地方存在这性能问题。标红的部分则表明性能比较低下。
(注意:如果没法展示堆栈图,说明没安装graphviz
)