xhprof安装和使用
安装
1. 下载
根据自己PHP版本下载,phpinfo()查看自己是TS/NTS VC9/VC11下载对应的版本,地址[http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/]
2. 解压扩展
php_xhprof.dll 解压到php安装目录的ext里
3. 配置扩展
配置php.ini文件 extension=php_xhprof.dll;
调试信息的保存路径(该路径为调试文件生成和web工具读取路径 xhprof.output_dir= "D:/phpStudy/WWW/xhprof_log"
重启APACHE,查看是否安装成功。
4. 下载web工具
下载地址[https://github.com/facebook/xhprof]
- 解压xhprof-master到www目录
- 运行http://localhost/xhprof/examples/sample.php 生成测试数据
- 访问http://localhost/xhprof/xhprof_html/ 查看数据列表
- 点击[View Full Callgraph] 报错需要安装Graphviz
5. 安装Graphviz
- 下载
从graphviz官网下载 [http://www.graphviz.org/Download.php](目测这个已经挂了)
或者从我的百度网盘下载 [http://pan.baidu.com/s/1i3mzunV]
下载完后直接安装 - 配置环境变量或者修改cmd 命令
将下图配置到系统的环境变量
或者修改下图文件中的cmd命令
这时候点击就会有图片出来
使用
将xhprof使用到实际项目中,可以根据sample.php适当修改
//开始监测,增添CPU数据,内存数据
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
$result = $this->resourceStockModel->specifyVender($param);
//停止监测,并将监测结果保存到xhprof_data里面,此结果是一个多维数组
$xhprof_data = xhprof_disable();
//输出监测结果
// print_r($xhprof_data);
//得到xprof的根目录,通过根目录引入xhprof_lib.php和xhprof_runs.php这两个文件
$XHPROF_ROOT = 'D:\phpStudy\WWW\xhprof';
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
//得到一个XHProfRuns_Default对象,其save_run方法可以将监测结果写入到一个日志文件中,然后返回日志文件名的前面一串ID
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "test_xhprof");
//输出一个链接,指向解析run_id后的页面
// echo '<br>' . '<a href="/xhprof/xhprof_html/index.php?run='.$run_id.'&source=test_xhprof" target="_blank">result</a>';
附录
- 红色的矩形部分就是性能开销大,需要优化的函数,
- 白色的矩形部分就是性能开销正常,不需要优化的函数,
- 黄色的矩形部分相对于白色矩形稍微有一些性能开销,但是没有红色矩形那么大,也就是性能开销在白色矩形和红色矩形之间
名称 | 含义 |
---|---|
FunctionName | 调用的函数名 |
Calls/Calls % | 函数的调用次数,以及百分比。可以检查调用次数高的函数是否有必要。 |
Incl. Wall Time (microsec) | 函数运行时间(包括子函数) |
Excl. Wall Time(microsec) | 函数运行时间(不包括子函数),这里可以倒叙,优化消耗时间最高的函数 |
Incl. CPU(microsecs) | 函数运行CPU(包括子函数) |
Excl. CPU(microsecs) | 函数运行CPU(不包括子函数 ) |
Incl.MemUse(bytes) | 函数运行消耗内存(包括子函数) |
Excl.MemUse(bytes) | 函数运行消耗内存(不包括子函数) |
不积跬步,无以至千里