docker安装php xhprof扩展及使用方法

1. 进入php容器的命令行模式,安装xhprof扩展

# 1. 进入扩展文件目录
cd /usr/src/php/ext

# 2. 下载xhprof扩展包
# 注释:https://pecl.php.net/get/xhprof-2.3.5.tgz地址从https://pecl.php.net/package/xhprof上获取,选择最新的包复制地址即可(参考图一)
wget https://pecl.php.net/get/xhprof-2.3.5.tgz
# 如果没有wget命令,需先安装 yum install wget 或 apt-get install wget

# 3. 解压下载下来的tgz压缩包
tar -zcvf xhprof-2.3.5.tgz

# 4. 复制文件夹中的extension到该目录
cp xhprof-2.3.5/extension ./

# 5. 将extension重命名为xhprof
mv extension/ xhprof/

# 6. 安装该扩展
docker-php-ext-install xhprof

# 查看扩展,可以看到已经安装上了
php -v

图一:
docker安装php xhprof扩展及使用方法_第1张图片

2. 开启xhprof扩展

# 1. 进入上一步中的xhprof文件夹,执行make命令
make && make install
# 2. 修改php.ini文件添加扩展,并配置生成的xhprof文件的存放位置
extension = "xhprof.so"
xhprof.output_dir= /usr/local/... # 根据实际情况设定目录,不设置则默认在/tmp下
# 3. 重启php-fpm即可

3. Yii2写法示例

//1. 在web.php中加入以下内容

include_once "...你的实际路径.../xhprof-2.3.5/xhprof_lib/utils/xhprof_lib.php";
include_once "...你的实际路径.../xhprof-2.3.5/xhprof_lib/utils/xhprof_runs.php";
if (!function_exists('xhprof_start')) {
    function xhprof_start() {
        xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
    }
}
if (!function_exists('xhprof_end')) {
    function xhprof_end($id, $action_id) {
        $xhprof_data = xhprof_disable();
        $xhprof_runs = new \XHProfRuns_Default();
        return $xhprof_runs->save_run($xhprof_data, $id . '-' . $action_id);
    }
}

//2. 在你想要分析的方法内加入以下内容
// 在方法最开始加入下面代码
xhprof_start();
// 在方法结尾加入下面代码,其中$this->id为控制器名,$this->action->id为方法名
$run_id = xhprof_end($this->id, $this->action->id);

4. 配置访问xhprof文件方式

将xhprof-2.3.5文件夹放在nginx可访问的目录下,并配置网站根目录为xhprof-2.3.5下的xhprof_html。

配置好后访问路径为

// 其中$run_id为上一步中的$run_id,
// 自动创建的文件名(位置是在php.ini中设置的xhprof.output_dir= /usr/local/...这个)也会包含这个run_id,
// 其中$source为【$xhprof_runs->save_run($xhprof_data, $id . '-' . $action_id);】中的$id . '-' . $action_id
// 自动创建的文件名(位置是在php.ini中设置的xhprof.output_dir= /usr/local/...这个)也会包含这个$source,

http(s)://$domain/index.php?run=$run_id&source=$source

// 也可以直接访问
http(s)://$domain/index.php // 会列出所有xhprof文件

5. XHProf报告字段含义

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,php,docker,服务器)