php 7 xhprof,php7中使用xhprof解析
开篇语
这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试、对比分析(支持php7).
推荐教程:《php教程》
前置构建 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 --ini
Configuration 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.PeakMemUseIncl.MemUse的峰值
Excl.PeakMemUseExcl.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. 结束
希望大家工作开心
php 7 xhprof,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 ...
- php7中使用 xhprof 分析
开篇语 这是篇纯文档,如果以后有需要可以随时查找, 使用 xhprof 进行分析, 方便代码测试.对比分析(支持php7). 前置构建 docker 虚拟测试环境 docker run -it -p ...
- php7安装xhprof,PHP7 下安装并使用 xhprof 性能分析工具
xhprof 的安装 cd ~ git clone https://github.com/longxinH/xhprof 安装 xhprof cd xhprof/extension/ /opt/php ...
- php7安装xhprof,xhprof php7的安装与使用
xhprof php7的安装与使用 2018-5-30 一.安装 cd /usr/local/src git clone https://github.com/yuanshuli11/xhprof.g ...
- laradock php扩展,laradock中使用xhprof、xhgui
在laradock环境中使用,xhprof性能分析扩展: 因为laradock没有xhprof扩展,所以先要自己修改php-fpm的Dockerfile文件,加入xhprof扩展: 先在github上 ...
- PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)
PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...
- 深入理解 PHP7 中全新的 zval 容器和引用计数机制
深入理解 PHP7 中全新的 zval 容器和引用计数机制 最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷惑. 仔细一想不难发现问题所 ...
- 10JavaScript中的预解析
技术交流QQ群:1027579432,欢迎你的加入! 1.预解析 JavaScript代码是由浏览器中的JavaScript解析器来执行的.JavaScript解析器在运行JavaScript代码的时 ...
最新文章
- 据说中台凉了?唔,真香
- ssh登陆分布式服务器进行编程
- C# PictureBox加载图片并显示进度条
- PHP GD库---之商详合成分享图片
- vc6.0中添加快捷注释
- Java——容器(Comparable)
- c语言兔子繁殖问题分析和递归方程,经典的兔子生兔子问题(C#递归解法)
- python3 一些常用的数学函数
- python 字符串首字母_如何将string(Python)中每个单词的首字母大写?
- “10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
- tesseract linux 训练
- 单片机喇叭如何响出报警声音 C语言程序,单片机报警器声音产生的方法(报警声音)...
- NBU MSDP 配置容量为 64TB (Redhat7)
- 梯度消失,梯度爆炸产生的原因及解决办法
- swagger初体验
- 电脑打字不显示汉字咋办
- linux服务器基础知识及工作原理汇总
- 无路可逃java攻略_孤岛惊魂5
- 权限维持之:SID History 域控权限维持
- 数字逻辑 | 期末复习 · 基本知识