docker使用xhprof进行thinkphp性能分析

一、小试牛刀

1.环境准备

进入docker,执行下面动作安装扩展

wget https://pecl.php.net/get/xhprof-2.3.9.tgz
tar xvf xhprof-2.3.9.tgz
mv xhprof-2.3.9/extension /usr/src/php/ext/xhprof
docker-php-ext-install xhprof

2.运行测试

代码参考:https://zhuanlan.zhihu.com/p/351056021

中间显示[View Full Callgraph]报错:failed to execute cmd: " dot -Tsvg". stderr: `sh: dot: not found ', 解决方法参考: 缺少包graphviz

apk add graphviz

二、thinkphp使用

代码参考:https://blog.csdn.net/weixin_29001327/article/details/116264651 不过上面的代码有点乱,可以参考我下面的代码。 application/tags.php

// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [
    ],
    // 应用开始
    'app_begin'    => [
        'app\\common\\behavior\\XhprofAnalyze',
        'app\\common\\behavior\\Logrecord'
    ],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [
        'app\\common\\behavior\\XhprofAnalyze',
        'app\\common\\behavior\\Logrecord'

    ],
];

application/common/behavior/XhprofAnalyze.php

<?php


namespace app\common\behavior;


class XhprofAnalyze
{
    public function appBegin($params)
    {
        xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
        save_log('xhprof enable', 1, '开始xhprof', 'xhprof_analyze');
    }

    public function appEnd($params)
    {
        $xhprof_data = xhprof_disable();

        $XHPROF_ROOT = realpath(dirname(env('PUB_PATH')) . '/xhprof');
        include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
        include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

        $xhprof_runs = new \XHProfRuns_Default();

        // save the run under a namespace "xhprof_foo"
        $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

        $site_url = 'http://mall-api.test'; //config('custom.site_url');
        save_log(['run_id'=>$run_id], 1, '结束xhprof', 'xhprof_analyze');

        echo "<a href='{$site_url}/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_foo'>查看</a>\n";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章