0

0

php7中使用xhprof解析

coldplay.xixi

coldplay.xixi

发布时间:2020-06-22 17:39:29

|

3699人浏览过

|

来源于juejin.im

转载

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 文件路径

立即学习PHP免费学习笔记(深入)”;

/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:

php7中使用xhprof解析

我们发现调用了xhprof拓展中的两个函数, 输出值含义

ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒复制代码

看到这里发现, 我们获取的信息并不是很多, 比如我们经常还要关心占用的内存、cpu等指标.

\xhprof_enable(
    XHPROF_FLAGS_MEMORY  
    +XHPROF_FLAGS_CPU
    +XHPROF_FLAGS_NO_BUILTINS
);复制代码

output:

php7中使用xhprof解析
  1. XHPROF_FLAGS_MEMORY 统计内存占用

  2. XHPROF_FLAGS_CPU 统计cpu占用

  3. XHPROF_FLAGS_NO_BUILTINS 不统计内置函数, 此次输出可以看到已经忽略了我们拓展中的函数

我们发现统计内存占用的字段, 有两个输出 mu 和 pmu , mu 表示使用的内存(bytes), pmu 表示使用的内存峰值(bytes)

3. 图表xhprof

当然,我们还是更希望图表的形式可以更直观的观察性能瓶颈, 下面我们看下怎么使用.

php商城系统
php商城系统

PHP商城系统是国内功能优秀的网上商城系统,同时也是一个商业的PHP开发框架,有多套免费模版,强大的后台管理功能,专业的网上商城系统解决方案,快速建设网上购物商城、数码商城、手机商城、办公用品商城等网站。 php商城系统v3.0 rc6升级 1、主要修复用户使用中出现的js未加载完报错问题,后台整改、以及后台栏目的全新部署、更利于用户体验。 2、扩展出,更多系统内部的功能,以便用户能够迅速找到需

下载

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 配置的路径下(需要自己手动创建下目录)

php7中使用xhprof解析

感兴趣可以打开看看, 里面存了我们分析的一些序列化对象信息.

3.2 配置一个单独的服务来访问我们的分析结果

php7中使用xhprof解析

我们指向我们xhprof项目中的 xhprof_html 目录

php7中使用xhprof解析

相信你到此明白了 我们的 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复制代码
php7中使用xhprof解析

红色部分和黄色部分重点关心下,如果感觉只想分析某个流程, 可以点击到某个方法里面再点击【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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2546

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1612

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1502

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1417

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1446

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

5

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号