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";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章