1.简介

当我们发现生产环境的某个接口执行时间特别长时应该怎么做?直接登录线上机器单步调试?打大量的log然后分析? 一般我们可以把分析流程拆分为如下几步操作:

1.分析开发环境下执行是否会慢;如果是代码问题,在开发环境下就能检测出来;

2.分析预发环境执行是否会慢;如果是数据库或者第三方扩展问题,在预发环境就能检查出来。

3.从生产环境摘一台机器,分析代码执行慢的原因;如果是机器的问题,在生产环境就能检查出来。

如果按照以上步骤排查问题、耗时、耗体、耗心情。

2.环境搭建

1.docker+mongodb:用来存储产生的分析数据

2.tideways扩展

3.安装xhgui:用来展示相应数据

4.利用PHP内部服务器测试

5.配置nginx

6.插入到php文件中

1.docker+mongodb

docker环境的搭建自行百度。

下载镜像

docker pull registry.docker-cn.com/library/mongo

执行sudo docker images 显示,说明镜像已经安装成功

registry.docker-cn.com/library/mongo latest eeeeee 3 weeks ago 393.3 MB

创建本地数据文件夹

/data1/mongodb

创建并启动mongodb容器

docker run --name mymongodb =v /data1/mongodb:/data1/mongodb --net=host -d 镜像id --auth(如果加了--auth 则连接mongo的时候需要账号密码建议不加)

执行命令 sudo docker ps

ddsdfdsfsd e21e0711c3d2:latest "docker-entrypoint.s 2 days ago Up 2 days mymongodb

测试一下

sudo docker exec -it mymongodb bash

mongo

MongoDB shell version v4.0.5

connecting to: mongodb:

Implicit session: session { ) }

MongoDB server version: 4.0.5

>

将mongodb加入php.ini

到这里说明mongodb已经安装成功,端口默认为27017

1.安装tideways扩展

下载安装包:

wget -Otideways-php.tar.gz "https://s3-eu-west-1.amazonaws.com/tideways/extension/4.1.5/tideways-php-4.1.5-x86_64.tar.gz"

安装扩展:

tar xzvf tideways-php.tar.gz

cd tideways-php

bash install.sh

将tideways扩展 加入php.ini

2.xhgui

安装过程

git clone https://github.com/laynefyc/xhgui-branch.git

cd xhgui-branch

composer update

composer install

修改MongoDB的连接ip和域名,路径如下:xhgui-branch/config/config.default.php

// Can be either mongodb or file.

/*

'save.handler' => 'file',

'save.handler.filename' => dirname(__DIR__) . '/cache/' . 'xhgui.data.' . microtime(true) . '_' . substr(md5($url), 0, 6),

*/

'save.handler' => 'mongodb',

// Needed for file save handler. Beware of file locking. You can adujst this file path

// to reduce locking problems (eg uniqid, time ...)

//'save.handler.filename' => __DIR__.'/../data/xhgui_'.date('Ymd').'.dat',

'db.host' => 'mongodb://127.0.0.1:27017', // 地址

'db.db' => 'xhprof', // 数据库名称

创建mongodb数据库、并优化索引

$ mongo

> use xhprof

> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )

> db.results.ensureIndex( { 'profile.main().wt' : -1 } )

> db.results.ensureIndex( { 'profile.main().mu' : -1 } )

> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )

> db.results.ensureIndex( { 'meta.url' : 1 } )

3. 利用PHP内置服务器测试

移动到xhgui-branch目录下的webroot目录

php -S 0.0.0.0:8888

image.png

说明执行成功

4. 配置nginx

server {

listen 80 ;

root /xhgui-branch/webroot;

server_name www.tuzisir.com;

fastcgi_param PHP_VALUE auto_prepend_file= /xhgui-branch/external/header.php; # 所有执行此域名都会被收集

location / {

index index.php;

if (!-e $request_filename) {

rewrite . /index.php last;

}

}

location ~ \.php$ {

set $script_uri "";

if ( $request_uri ~* "([^?]*)?" ) {

set $script_uri $1;

}

fastcgi_pass 127.0.0.1:9768; # 配置php-fpm

fastcgi_param SCRIPT_URL $script_uri;

include fastcgi/comm_fastcgi_params;

}

}

配置php-fpm,主要参数

[www.tuzisir.com]

user = www

group = www

listen = 127.0.0.1:9768

测试

输入域名

4. 单独php使用

include_once "/xhgui-branch/external/header.php";

3.其它问题

1.如何不收集某域名下的执行数据

修改xhgui-branch/config/config.default.php

'profiler.enable' => function() {

if($_SERVER['SERVER_NAME'] == 'www.tuzisir.com'){

return false;

}else{

// 100%采样,默认为1%

return true;//rand(1, 100) === 42;

}

},

2.默认情况下,MongoDB 运行在一个信任的环境里(是不需要用户名和密码认证的)加 --auth 则需要用户名密码

4.学习地址

php 非侵入式,Tideways和xhgui打造PHP非侵入式监控平台相关推荐

  1. Tideways+Xhgui搭建非侵入式php监控平台

    ##Tideways+Xhgui搭建非侵入式php监控平台 ###参考文档: yq.aliyun.com/articles/98- segmentfault.com/a/119000000- wind ...

  2. 非接触式IC卡与条码卡磁卡接触式IC卡相比较

    一.最新技术-非接触IC卡 非接触IC卡,又名感应卡,诞生于90年代初,由于存在着条码卡.磁卡和接触式IC卡不可比拟的优点,使之一经问世,便立刻引起了广泛的关注,并以惊人的速度得到推广应用. 非接触式 ...

  3. 五种网络IO模型:阻塞式IO 非阻塞式IO IO复用(IO multiplexing) 信号驱动式IO 异步IO

    文章目录 五种网络IO模型 举例说明 阻塞式I/O模型 非阻塞式I/O I/O多路复用 信号驱动式I/O 异步I/O 比较结果 总结 同步 异步 阻塞 非阻塞 阻塞/非阻塞: 同步/异步: 举例子:小 ...

  4. 表格存储TableStore全新升级,打造统一的在线数据存储平台!

    表格存储TableStore是阿里云自研的面向海量结构化和半结构化数据存储的Serverless NoSQL多模型数据库,被广泛用于社交.物联网.人工智能.元数据和大数据等业务场景.表格存储Table ...

  5. 园区元宇宙:打造智慧园区综合治理可视化管理平台

    随着城市化进程的持续推进,城市居民对绿带的向往与日俱增.建设绿色生态城市,构建城市生态新平衡的重要性日益提升,立足于"智慧城市"发展浪潮,通过引入建立在移动互联网.物联网.实时定位 ...

  6. java静态类和非静态类_关于java:静态和非静态内部类的区别?

    我正在阅读有效的Java 2 -项目22,它在标题中写道: "Favor static member classes over non-static" 但是在这一章的结尾 Impl ...

  7. 智和信通:立足数字化、智能化、可视化,打造一站式制造业网络运维平台

    新时代下,云.大.物.移.智等新一代信息技术得到快速发展与大范围应用,一方面推动传统制造业改造升级向智能工厂转型,促进海量信息互通共享,但另一方面,也产生了一系列网络运维及安全难题.在"云制 ...

  8. ByteV打造3D海上风电监控平台 ——助力风电能源可持续发展

    ByteV自主研发了3D海上风电监控平台有着丰富的组态化可供选择,本文将介绍如何运用ByteV丰富的2D.3D组态搭建可视化解决方案. 风电厂是指采用风力发电形式的电厂.风电厂在生产的过程中,风力发电 ...

  9. matlab fm非相干解调,FM调制和相干解调,非相干解调讲解.doc

    PAGE ???通信原理课程设计报告 题目:模拟通信系统频率调制的实现 专业班级: 13电信科技2班 姓 名: 学 号: 指导教师: 彭文娟 [摘要]本设计主要是用MATLAB软件仿真实现语音信号作为 ...

最新文章

  1. 李茶:虎牙直播推荐系统架构详解
  2. 使用TensorRT加速yolo3
  3. 解析不是utf-8的xml文件 附(tag 属性的获取 )
  4. Activiti工作流内建数据库表分析
  5. IAR之函数和变量的绝对地址定位
  6. 嵌入式Linux中I2C设备驱动程序的研究与实现
  7. Hadoop:eclipse配置hadoop-eclipse-plugin(版本hadoop2.7.3)
  8. python获取原图GPS位置信息,轻松得到你的活动轨迹
  9. springboot启动时的一个bug
  10. css 控制div高度自适应浏览器的高度
  11. 游戏迷英雄联盟游戏高清壁纸!扮演你的英雄
  12. 正则表达式验证首尾是空格的字符串
  13. 信息收集知识及工具梳理
  14. TP框架使用ajax的post请求方式下载文件
  15. uniapp显示彩色的阿里icon的图标
  16. PHP案例-精彩商城教学
  17. Spring源码学习笔记:经典设计模式之工厂模式
  18. php 判断某一天是周几,php如何判断一个日期是周几
  19. h5支付不能打开支付宝 ios_iOS解决H5支付跳转到支付App及返回原App问题
  20. 今天吃什么 随机选择(抽奖,抽人适用)纯html、css静态页面

热门文章

  1. C#LeetCode刷题-树状数组
  2. 面向对象设计原则之7-迪米特法则
  3. sqlmap源码阅读_setPreprocessFunctions和_setPostprocessFunctions
  4. clickhouse的常见问题以及和mysql相关特性对比
  5. unittest学习记录
  6. Android 应用基础知识和应用组件
  7. html5支持多中浏览器写法,html5及css3对table表格高亮当前行列的多浏览器兼容写法...
  8. matlab设置背景颜色
  9. Python的模块千奇百怪,居然有自动发短信的模块?
  10. 处理Redis里的数据