tideways、xhprof、xhgui 介绍
tideways 是一家提供 PHP 利用性能监控相干服务的公司,最次要的产品是 tideways PHP 性能监控扩大,tideways 扩大可能监控申请耗时,SQL 执行耗时,CPU 和内存占用。监控数据存储反对 MySQL 和 MongoDB。
提到 PHP 性能监控,不得不提性能监控工具 xhprof。xhprof 是 facebook 开发并开源的 PHP 性能监控扩大,配合 xhgui 做数据的可视化。但因为 facebook 前期将自家 PHP 替换成 HHVM,xhprof 也不再保护了。之后 tideways 演化出了两个分支,一个是本来的 tideways 扩大,一个是继承自 xhprof 的 tideways_xhprof 扩大,tideways_xhprof 内的性能与 xhprof 统一。在演化成两个分支后,原有的 tideways 逐步演化成了付费的 SaaS 服务,而 tideways_xhprof 兼容了 xhprof 的一些应用习惯,并会始终保护。
产生分支前的最初一个版本:https://github.com/tideways/php-xhprof-extension/tree/v4.1.7
产生分支后的第一个版本:https://github.com/tideways/php-xhprof-extension/tree/v5.0-beta1
php-monitor 介绍
在 xhprof 不保护之后,其对应的数据可视化 xhgui 也就随之不再更新。php-monitor 的作者最开始是为了做一版汉化的 xhgui:xhgui-branch。之后作者又联合 tideways 扩大做了 php-monitor,一个 PHP 性能监控平台,同时反对监控数据收集和数据可视化展现。
配置过程
tideways 扩大
先装置 tideways 扩大。如果应用 PHP 5.6,请下载 tideways v4.1.5。如果应用 PHP7+,请下载 v4.1.7(更高的版本无奈显示 SQL)。
wget --no-check-certificate https://github.com/tideways/php-xhprof-extension/archive/v4.1.7.tar.gz && tar zxvf v4.1.7.tar.gz && cd php-xhprof-extension-4.1.7 && phpize && ./configure && make && sudo make install
我的项目中引入 php-monitor
首先要明确,php-monitor 蕴含两局部,数据收集和数据可视化。数据收集须要将 php-monitor 整合进我的项目中,数据可视化局部则独自部署。这两块的数据局部互通即可。
之后尝试在 swoole 我的项目中引入 php-monitor,首先发现 php-monitor 没有公布到 packagist,所以只能本地装置。
监控数据存储
数据存储应用 MongoDB,方便快捷。
我的项目是在本地 docker-compose 下起来的,在 docker-compose.yml 中创立一个 mongo 容器并向外裸露 mongo 端口 27017。同时 php-monitor 的数据可视化局部也能够在 mongo 中读取监控数据。
docker-compose.yml 申明 mongo
my-mongodb:
container_name: my-mongodb
image: mongo:4.0.3
restart: always
volumes:
- ./mongodata/db:/data/db
- ./mongodata/log:/var/log/mongodb
ports:
- 27017:27017
networks:
- my-networks
environment:
MONGO_INITDB_ROOT_USERNAME:
MONGO_INITDB_ROOT_PASSWORD:
在 php-monitor/src/config/config.php 中配置应用 mongo,在 swoole 解决申请的函数中开启监控,并在返回后记录数据
public function onRequest(SwooleRequest $request, SwooleResponse $response)
{
require_once '/working/vendor/laynefyc/php-monitor/src/autoPrepend.php';
// 解决
\pm\common\PMonitor::shutdown($uri, '127.0.0.1','GET');
}
在 mongo 中能够看到监控数据:
!https://deb-gmi.oss-cn-beijing.aliyuncs.com/img/2021032612144…
其中 profile 字段是具体的调用栈状况,a ==> b 示意从 a 函数到 b 函数的过程
- ct:调用的次数
- wt:函数办法执行的工夫耗时。相当于,在调用前记录一个工夫,函数办法调用结束后,计算时间差。
- cpu:函数办法执行耗费的 cpu 工夫。和 wt 的差异在于,当过程让出 cpu 使用权后,将不再计算 cpu 工夫。通过调用零碎调用 getrusage 获取过程的占用 cpu 数据。
- mu:函数办法所应用的内存。相当于,在调用前记录一个内存占用,函数办法调用结束后,计算内存差。调用的是 zend_memory_usage 获取内存占用状况。
- pmu:函数办法所应用的内存峰值。调用的是 zend_memory_peak_usage 获取内存状况。
数据可视化
应用同样的 mongo 配置,在 php-monitor/public 中启动服务 php -S 127.0.0.1:8066
浏览器拜访:
按 url 查问耗时:
查看具体一次申请的 SQL 耗时详情:
函数的耗时和内存占用:
函数调用次数和总耗时:
性能指标监控的原理
应用 tideways 扩大提供的 tideways_enable 开启监控,tideways_disable 完结监控。能够监控到这两个函数之间的所有执行过程。这一点跟 xhprof 统一,也是 xhprof_enable 开启,xhprof_disable 完结。
xhprof 扩大:
// 开启监控
xhprof_enable();
// 业务逻辑
// 完结监控
$xhprofData = xhprof_disable();
tideways 扩大:
// 开启监控并反对 CPU 和内存监控
tideways_enable(TIDEWAYS_FLAGS_CPU | TIDEWAYS_FLAGS_MEMORY);
// 开启 sql 监控
tideways_span_create('sql');
// 业务逻辑
// 完结监控
$monitorData = tideways_disable();
// sql 监控
$sqlData = tideways_get_spans();
tideways_xhprof 扩大:
// 开启监控并反对 CPU 和内存监控
tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_CPU);
// 业务逻辑
// 完结监控
$monitorData = tideways_xhprof_disable();
参考援用:
xhgui:https://github.com/laynefyc/xhgui-branch
php-monitor:https://github.com/laynefyc/php-monitor/blob/master/README-zh_CN.md
作者博文《Tideways 和 xhgui 打造 PHP 非侵入式监控平台》:https://blog.it2048.cn/article-tideways-xhgui/
tideways github:https://github.com/tideways/php-xhprof-extension/
tideways 官网对 tideways 扩大的接管及数据格式阐明:https://support.tideways.com/documentation/reference/tideways…
《Swoole 整合 PHP 性能剖析平台: Tideways+Xhgui》:https://blog.csdn.net/uisoul/article/details/103936873
《composer 如何装置本地依赖包》:https://learnku.com/laravel/t/1999/composer-local-path-loadin…
《深刻理解 xhprof 性能剖析工具》:https://www.bo56.com/ 深刻理解 xhprof 性能剖析工具 /
本文由 mdnice 多平台公布