安装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点击 View Full Callgraph
还可以生成图表,图表需要系统安装 graphviz
分析结果各字段含义
指标 | 含义 |
---|---|
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% | 方法本身执行占用的内存百分比。 |
网友评论