一、小試牛刀
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";
}
}