php7中使用 xhprof 分析
开篇语
这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试、对比分析(支持php7).
前置构建 docker 虚拟测试环境
docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash
复制代码
1. 安装xhprof
支持php7的xhprof还挺多的, 我们这里使用 github.com/longxinH/xh… 这个项目。
1.1 拉取项目
git clone https://github.com/longxinH/xhprof.git
复制代码
1.2 安装项目
cd xhprof/extension/
/usr/server/php7/bin/phpize
./configure --with-php-config=/usr/server/php7/bin/php-config
make && make install
复制代码
1.3 添加 xhprof.so 拓展
执行完最后,我们需要将此 so 文件引入到php.ini配置下
查看 php.ini 文件路径
/usr/server/php7/bin/php --iniConfiguration File (php.ini) Path: /usr/server/php7/etc
Loaded Configuration File: /usr/server/php7/etc/php.ini
Scan for additional .ini files in: /usr/server/php7/etc/php
Additional .ini files parsed: (none)
复制代码
编辑 /usr/server/php7/etc/php.ini
[Xhprof]
extension=xhprof.so
xhprof.output_dir=/data/logs
复制代码
重启 php-fpm 即可。
2. 使用 xhprof
搭建案例过程略
我们在要监控的逻辑前面嵌入下面代码
\xhprof_enable();
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
$xhprof_data = \xhprof_disable();
print_r($xhprof_data);
复制代码
output:
我们发现调用了xhprof拓展中的两个函数, 输出值含义
ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒
复制代码
看到这里发现, 我们获取的信息并不是很多, 比如我们经常还要关心占用的内存、cpu等指标.
\xhprof_enable(XHPROF_FLAGS_MEMORY +XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS
);
复制代码
output:
XHPROF_FLAGS_MEMORY 统计内存占用
XHPROF_FLAGS_CPU 统计cpu占用
XHPROF_FLAGS_NO_BUILTINS 不统计内置函数, 此次输出可以看到已经忽略了我们拓展中的函数
我们发现统计内存占用的字段, 有两个输出 mu 和 pmu , mu 表示使用的内存(bytes), pmu 表示使用的内存峰值(bytes)
3. 图表xhprof
当然,我们还是更希望图表的形式可以更直观的观察性能瓶颈, 下面我们看下怎么使用.
3.1 这时候需要我们用到 xhprof_lib 库
在我们下载 xhprof 源码时候,目录中已经包含了
\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS);......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......$xhprof_data = \xhprof_disable();include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');
echo $run_id; //output 5cbf25e21fe9b
复制代码
执行打印出来一个字符串, 这个我们可以理解为文件标识符. 我们发现执行了 save_run 方法,那保存到哪里了呢.
您还记得我们在引入 xhprof.so 拓展时候的另一个配置吗?
没错, 在 xhprof.output_dir 配置的路径下(需要自己手动创建下目录)
感兴趣可以打开看看, 里面存了我们分析的一些序列化对象信息.
3.2 配置一个单独的服务来访问我们的分析结果
我们指向我们xhprof项目中的 xhprof_html 目录
相信你到此明白了 我们的 run_id 和 save_run中的project 的作用了
我们最上面部分是请求的接口指标总览, 下面是具体的每个调用函数的执行情况。
字段名 | 含义 |
---|---|
Calls | 调用次数 |
Incl. Wall Time | 调用的包括子函数所有花费时间,以微秒算 |
Excl. Wall Time | 函数执行本身花费的时间,不包括子树执行时间,以微秒算 |
Incl. CPU | 调用的包括子函数所有花费的cpu时间 |
Excl. CPU | 函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算 |
Incl.MemUse | 包括子函数执行使用的内存, 以字节算 |
Excl.MemUse | 函数执行本身内存,以字节算 |
Incl.PeakMemUse | Incl.MemUse的峰值 |
Excl.PeakMemUse | Excl.MemUse的峰值 |
其余后面的 % 结尾均为对应的占比
3.3 [View Full Callgraph]
如果查看调用流程需要安装 graphviz 图形库. 这里我们推荐手动安装 graphviz 2.24.0 这个版本(亲自踩坑,2.40不支持)
yum -y install libtool-ltdl-develcd /data/graphviz-2.24.0./configure
make
make install
复制代码
红色部分和黄色部分重点关心下,如果感觉只想分析某个流程, 可以点击到某个方法里面再点击【View Full Callgraph】查看图表
4. 问题点
我们在上面使用xhprof的时候发现了强依赖, 在代码中引入了 xhprof 安装包里的几个类.
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
复制代码
这里我们可以使用composer包引用来实现相同功能, 这里推荐引入 pbweb/xhprof 包。
5. 结束
希望大家工作开心
更多精彩关注公众号【呆呆熊一点通】
转载于:https://juejin.im/post/5cbdc51fe51d456e6d1334aa
php7中使用 xhprof 分析相关推荐
- php7安装xhprof,php7中使用 xhprof 分析
这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试.对比分析(支持 php 7). 前置构建 docker 虚拟测试环境 docker run -it -p 80 ...
- php 7 xhprof,php7中使用 xhprof 分析
开篇语 这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试.对比分析(支持php7). 前置构建 docker 虚拟测试环境 docker run -it -p ...
- php 7 xhprof,php7中使用xhprof解析
开篇语 这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试.对比分析(支持php7). 推荐教程:<php教程> 前置构建 docker 虚拟测试环境 ...
- PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)
PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...
- laradock php扩展,laradock中使用xhprof、xhgui
在laradock环境中使用,xhprof性能分析扩展: 因为laradock没有xhprof扩展,所以先要自己修改php-fpm的Dockerfile文件,加入xhprof扩展: 先在github上 ...
- 论电子计算机在审计中的应用,计算机技术在审计中的应用领域分析.doc
计算机技术在审计中的应用领域分析.doc 计算机技术在审计中的应用 [ ]审计工作作为我WW民经济屮的重要的一个环节,由于有大量的数据需耍处理, 使得计算机技术在审计领域的大规模推广具有很强的实践意义 ...
- R语言效用分析 ( 效能分析、Power analysis)、除了pwr包之外还有其它包、例如、基因研究中的效能分析、MBESS包可用于各种形式的效能分析和最少样本量确定、其他效用分析包的简要介绍
R语言效用分析 ( 效能分析.Power analysis).除了pwr包之外还有其它包.例如.基因研究中的效能分析(power analysis).MBESS包可用于各种形式的效能分析(power ...
- 卫星图像中的车辆分析--A Large Contextual Dataset for Classification, Detection and Counting of Cars
A Large Contextual Dataset for Classification, Detection and Counting of Cars with Deep Learning ECC ...
- 如何调整按钮里的文字的位置android_UI设计中按钮场景分析
别无他话,今天就和大家聊一聊设计宿敌--按钮设计.按钮的设计看似简单,其实按钮的功能不同,设计形式上也会有差异,今天我就针对按钮的场景分析,对按钮进行全面的解析. 按照功能性分类,按钮主要包括行为召唤 ...
最新文章
- slam中特征点归一化原因以及方法
- 脑电分析系列 | eeglab汇总
- 1.2 正交化-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 有赞下拉菜单html,有赞vant-ui Tabs、List、PullRefresh组件实践
- oracle sql如何剔除周末,Oracle 跳过周末的sql
- [Ubuntu] Your Firefox profile cannot be loaded. It may be missing or inaccessible
- Eclipse使用:Eclipse安装中文语言包
- Mac终端命令失效( command not found)/
- eclipse+lomboz*tomcat简单配置
- Python之保留字
- 什么是实体-联系图(ER图)
- 1 c语言程序设计学生选修课管理,c语言课程设计报告-学生选修课信息管理程序.doc...
- 嵌入式linux shadow文件,04.嵌入式Linux文件系统
- # [cs231n (五)神经网络part 1 构建架构 ][1]
- Docker学习十:网络
- 解决:向日葵连接已断开
- FPGA 30 综合数字ADC /DAC 信号发送采集系统设计(综合项目设计)
- 成为Java GC专家系列(三) ——如何优化Java垃圾回收
- 阿里云时空数据库实战:数据入库与导出
- 伦敦大学学院 机器人与计算机,伦敦大学学院机器人与计算理学硕士研究生申请要求及申请材料要求清单...
热门文章
- ots在线考计算机的word,ots在线考试系统1(OTS online examination system 1).doc
- 改镜像_镜像制作大法
- html文本框自动赋值,js给文本框赋值 value与innerHTML
- 洛谷 P1494 [国家集训队]小Z的袜子
- Vue跨路由触发事件,Vue监听sessionStorage
- tomcat安装与项目部署
- [COGS58] 延绵的山峰
- ORA-32004 参数设置过时的解决办法
- 如何解决Ubuntu与Windows双系统时间不同步
- jQuery 双击事件(dblclick)时,不触发单击事件(click)