简介
XHProf 是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。
它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。函数性能报告可以由调用者和被调用者终止。在数据搜集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。
XHProf 包含了一个基于 HTML 的简单用户界面(由 PHP 写成)。基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。同时也支持查看调用图。
XHProf 的报告对理解代码执行结构常常很有帮助。比如此分层报告可用于确定在哪个调用链里调用了某个函数。
XHProf 对两次运行进行比较(又名 “diff” 报告),或者多次运行数据的合计。对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。
安装
PECL 安装
安装此 PECL 扩展相关的信息可在手册中标题为 PECL 扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、 维护人员信息及变更日志等,都在此处:» https://pecl.php.net/package/xhprof
源码安装
下载
wget https://pecl.php.net/get/xhprof-2.3.9.tgz
tar -zxvf xhprof-2.3.9.tgz
cd ./xhprof-2.3.9/extension
phpize
./configure --with-php-config=/usr/local/php-7.4/bin/php-config
make
make install
php.ini
配置
[xhprof]
extension=xhprof.so;
xhprof.output_dir=/tmp/xhprof;
确认安装成功
/var/www # php --ri xhprof
xhprof
xhprof support => enabled
Version => 2.3.9
使用
中间件 XhprofMiddleware
class XhprofMiddleware implements MiddlewareInterface
{
/**
* @desc: process 描述
* @param Request $request
* @param callable $handler
* @return Response
* @author Tinywan(ShaoBo Wan)
*/
public function process(Request $request, callable $handler): Response
{
$xhprof = $request->get('xhprof', 0);
$extension = extension_loaded('xhprof');
if ($xhprof && $extension) {
// xhprof_lib 在下载的包里存在这个目录,记得将目录包含到运行的php代码中
include_once public_path() . "/xhprof/xhprof_lib/utils/xhprof_lib.php";
include_once public_path() . "/xhprof/xhprof_lib/utils/xhprof_runs.php";
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS + XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
$response = $handler($request);
if ($xhprof && $extension) {
$data = xhprof_disable();
$objXhprofRun = new XHProfRuns_Default();
$objXhprofRun->save_run($data, sprintf('%s', date("YmdHis")));
}
return $response;
}
}
查看
访问地址
http://webman.xhprof.com/xhprof/xhprof_html/index.php
Existing runs
WebmanApp::Webman{closure}
图形化展示
其他
Function Name:方法名称。
Calls:方法被调用的次数。
Calls%:方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间。(单位:微秒)
IWall%:方法执行花费的时间百分比。
Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)
EWall%:方法本身执行花费的时间百分比。
Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)
ICpu%:方法执行花费的CPU时间百分比。
Excl. CPU(microsec):方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位:微秒)
ECPU%:方法本身执行花费的CPU时间百分比。
Incl.MemUse(bytes):方法执行占用的内存,包括子方法执行占用的内存。(单位:字节)
IMemUse%:方法执行占用的内存百分比。
Excl.MemUse(bytes):方法本身执行占用的内存,不包括子方法执行占用的内存。(单位:字节)
EMemUse%:方法本身执行占用的内存百分比。
Incl.PeakMemUse(bytes):Incl.MemUse峰值。(单位:字节)
IPeakMemUse%:Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes):Excl.MemUse峰值。单位:(字节)
EPeakMemUse%:Excl.MemUse峰值百分比。
原文始发于微信公众号(开源技术小栈):PHP 性能追踪及分析工具 Xhprof
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248366.html