美文网首页
# 使用 xhprof 对php进行性能分析

# 使用 xhprof 对php进行性能分析

作者: airmy丶 | 来源:发表于2021-01-28 15:21 被阅读0次

安装xhprof拓展

地址: https://pecl.php.net/package-info.php?package=xhprof。目前公司的环境还是5.6的版本,所以我这里选择了0.9.4的版本(使用2.x的版本不适用php5.6)

下载后解压进入解压文件

cd xhprof-0.9.4/extension

# 安装php拓展的三步
phpize

./configure

make && make install

安装完成之后,添加到php.ini配置文件

 [xhprof]
 extension=xhprof.so
 ; 存放性能收集数据的目录-自定义
 xhprof.output_dir=/tmp/xhprof

xhprof使用

xhprof压缩包下载之后会有两个xhprof开头的文件夹: xhprof_html,xhprof_lib,如图:

xhprof-0.9.4
├── CHANGELOG
├── CREDITS
├── LICENSE
├── README
├── examples
├── extension
├── xhprof_html
└── xhprof_lib

将这两个文件夹复制到项目的目录下(这里我做测试直接放到了项目的根目录下了),随便找一个控制器方法:

public function test()
{
    // 如果这里出现502使用下面这条语句
    // xhprof_enable( XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
    xhprof_enable();
    // 业务代码
    ....
    
    $xhprof_data = xhprof_disable();
    $XHPROF_ROOT = PROJECT_ROOT_PATH;
    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();
    $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
    $url = "http://localhost/index.php?run=$run_id&source=xhprof_foo";
    echo '<a href="'.$url.'">'.$url.'</a>';exit;
}

关于这里的分析结果路径http://localhost/index.php?run=$run_id&source=xhprof_foo,这个结果路径是调用的xhprof_html下的index.php,所以做测试的时候我配置了一个nginx站点只想xhprof_html 这个路径,访问接口就可以直接输出分析结果路径了。

image

点击链接就可以看到各个过程只想消耗时间,调用次数等:

image

点击 View Full Callgraph 还可以生成图表,图表需要系统安装 graphviz

image

分析结果各字段含义

指标 含义
Function Name 方法名称
Calls 方法被调用次数
Calls% 方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec) 方法执行花费的时间,包括子方法的执行时间.(单位:微秒)
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% 方法本身执行占用的内存百分比。

相关文章

网友评论

      本文标题:# 使用 xhprof 对php进行性能分析

      本文链接:https://www.haomeiwen.com/subject/wltxtltx.html