使用XHProf扩展检查PHP性能
作者: 何忠利 • 发表于 2021-01-02
使用PHP开发接口时,有时会接口响应耗时很长的情况。这个时候如果我们判定出是PHP这块出现的耗时,在代码逻辑特别复杂的情况下有或者不是自己不知道业务的情况下,如果快速判断出是那块代码导致的耗时呢?使用Xhprof性能分析可以看到一次PHP运行的整个生命周期
1. XHProf说明
XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面( PHP写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。
2. XHProf安装(我使用的php7.0版本无法使用pecl.php.net的包,从github下载)
[root@localhost ~]# cd /usr/local/ && git clone https://github.com/longxinH/xhprof
[root@localhost local]# cd xhprof/extension/
[root@localhost extension]# /usr/local/php/bin/phpize
[root@localhost extension]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-xhprof
[root@localhost extension]# make
[root@localhost extension]# make test
[root@localhost extension]# make install
3. 配置php.ini
# 创建.xhprof文件存放目录
[root@localhost extension]# mkdir -p /tmp/xhprof
[root@localhost extension]# vi /usr/local/php/etc/php.ini
# 增加以下配置
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof
# 重启php-fpm
service php-fpm reload
4. XHProf使用
4.1 将以下代码加入代码或项目入口头部,触发该入口代码。
<?php
xhprof_enable();
register_shutdown_function(function() {
$xhprof_data = xhprof_disable();
include_once '/usr/local/xhprof/xhprof_lib/utils/xhprof_lib.php';// 注意是xhprof项目
include_once '/usr/local/xhprof/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test");
});
// 以下是自己应用代码
// todo...
4.2 运行代码后在/tmp/xhprof目录生成.xhprof文件表示成功
[root@localhost ~]# ls /tmp/xhprof/
5ff08a5a36579.xhprof_test.xhprof
5. Xhprof使用
5.1 Xhprof提供的是Web界面访问,这里需要将xhprof项目设置成Web能够访问。(博主使用的是nginx)
[root@localhost ~]# vi /usr/local/nginx/conf/vhost/php.xhprof.conf
#增加以下配置
server {
listen 80;
server_name php.xhprof.cn;
root /usr/local/xhprof/xhprof_html;
location / {
try_files $uri /index.php?$args;
}
}
# 重启nginx
[root@localhost ~]# service nginx reload
# 增加host
[root@localhost ~]# echo '127.0.0.1 php.xhprof.cn' >> /etc/hosts
5.2 浏览器请求php.xhprof.cn可以看到生成的统计文件,点击某个即可看到PHP运行生命周期的调用与耗时等等...
No XHProf runs specified in the URL.
Existing runs:
5.3 进入文件后点击[View Full Callgraph]能看见调用图,点击如出现dot相关错误,请在服务器上执行: yum install graphviz
总结:如我们需要开发对性能要求比较高的项目时,可以使用该扩展可直观的看见自己代码的瓶颈,或者对项目不熟悉的时候快速熟悉代码调用逻辑与性能。
作者理解的浅,如有错误欢迎指出。
转发请注明出处!
文章关键词:
# PHP扩展
# PHP
# XHProf
阅读量:
999
返回主页