PHP 性能追踪及分析工具 Xhprof

简介


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

PHP 性能追踪及分析工具 Xhprof

WebmanApp::Webman{closure}

PHP 性能追踪及分析工具 Xhprof

图形化展示

PHP 性能追踪及分析工具 Xhprof

其他

Function Name:方法名称。
Calls:方法被调用的次数。
Calls%:方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间。(单位:微秒)
IWall%:方法执行花费的时间百分比。
ExclWall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)
EWall%:方法本身执行花费的时间百分比。
InclCPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)
ICpu%:方法执行花费的CPU时间百分比。
ExclCPU(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

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!