docker php composer 使用_Tideways+ XHGui对PHP代码进行性能分析(Docker环境)

其实网上这类文档已经很多了,以下是亲测可执行过程,供各位参考。

一、安装

安装PHP相关的Docker环境

# redis mysql是我本地环境需要的 各位不需要安装,mongo是XHGui用到的 
docker pull mongo:latest  
docker pull redis:latest 
docker pull webdevops/php-apache:7.2 
docker pull mysql:5.7 
docker run -it -d -p 6379:6379 --name redis  redis:latest 
docker run -it -d -p 8306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql57  -v ~/Documents/mysql57:/var/lib/mysql mysql:5.7 
docker run -it -d -p 27017:27017 -v ~/Documents/code/mongodb:/data/db --name mongo mongo:latest 
docker run -it -d -p 8272:80 -p 8273:443 --name php72 --link redis:redis --link mysql57:mysql57 -v ~/Documents/code:/app webdevops/php-apache:7.2 

# 时区修改 
docker cp /usr/share/zoneinfo/Asia/Shanghai redis:/etc/localtime 
docker cp /usr/share/zoneinfo/Asia/Shanghai mysql57:/etc/localtime 
docker cp /usr/share/zoneinfo/Asia/Shanghai mongo:/etc/localtime 
docker cp /usr/share/zoneinfo/Asia/Shanghai php72:/etc/localtime 

安装tideways扩展及Mongo扩展

进入本地环境安装包目录,请将localPath替换成自己的目录,我本地是 ~/Documents/code/evn_config

cd  /localPath/
git clone https://github.com/tideways/php-xhprof-extension.git 


下面开始进入容器中处理,安装tideways_xhprof扩展和mongo扩展

docker exec -it php72 bash
cd /app/evn_config/php-xhprof-extension
phpize
./configure
make && make install
echo 'extension=tideways_xhprof.so'>/usr/local/etc/php/conf.d/tideways_xhprof.ini

pecl install mongodb
echo 'extension=mongodb.so'>/usr/local/etc/php/conf.d/mongodb.ini
service php-fpm restart

安装XHGui

退出docker,将xhgui下载到本地, 我本地是 ~/Documents/code/evn_config

cd  /localPath 
#以下是我开始下载的xhgui,但是发现挺多bug,包括安装composer也是一路坎坷
#git clone https://github.com/perftools/xhgui.git 
#下面这个是网上翻到的其他网友处理过的branch,应该不错,可惜我git下来之后composer还是挺多问题
#git clone https://github.com/laynefyc/xhgui-branch.git 
#最终基于原始的xhgui,经过一翻改造以后,我维护到了自己的github上,供大家直接克隆下载
git clone https://github.com/ilover17/xhgui.git

由于本地已经有php环境了,所以我将composer.json里面的php相关依赖去掉,包括phpunti也可以去掉 (反正里面的用例也有问题)

完成后进入docker 进行下composer操作

说明:如果大家下载的是https://github.com/ilover17/xhgui.git,可以不需要再composer了,直接进入配置阶段

当然你可以进去composer update一下

二、配置

配置之前,先说一下整个性能分析的基本数据采集和数据展示的原理:

1)数据采集:

方式1:通过php的auto_prepend_file参数,完成Tideways的非入侵式采集开启(实际上也是入侵),php脚本执行完成后自动进行disable,并将数据存入配置好的mongo数据库中。

方式2:通过Tideways提供的方法,进行数据的主动采集到某个文件中,再通过xhgui提供的导入方法,导入到mongo中

2)数据展示

访问xhgui的web地址,xhgui查询配置的mongo中的数据,并展现到ui上。

PHP配置

我的docker中是apache,所以用另外一种方案,直接进入docker后修改一下php.ini配置:

docker exec -it php72 bash

echo 'auto_prepend_file=/app/evn_config/xhgui/external/header.php'>auto_prepend.ini

XHGui 配置Mongodb

直接修改xhgui/config/config.default.php 其中mongodb的ip地址请根据本地实际情况来

'db.host' => getenv('XHGUI_MONGO_HOST') ?: 'mongodb://172.17.0.9:27017',
'db.db' => getenv('XHGUI_MONGO_DATABASE') ?: 'xhprof',

XHGui 配置生成日志的频率,采样规则

还是修改config.default.php中的配置信息

'profiler.enable' => function() { 
   // url 中包含debug=1则百分百捕获 
   // 说明,这里可以加上自定义的采样规则,可以通过$_SERVER等来判断
   if(!empty($_GET['debug'])){ 
       return True; 
   }else{ 
       // 1%采样 
       return rand(1, 100) === 42; 
   } 
} 

mongo 配置

docker exec -it mongo bash
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 } ) 

三、实例效果

04e07651f4c6ce49c2ea3940b8f5c784.png

6a998126adaaa53203c335fb1ac7d598.png

32294d0738e8ac671853b06fae17bdc7.png

c098e6552a0d3bd85c4716838e9682a9.png

8960eb1721d058503499a8e3b4285f44.png

4ac14df2bd619458b3aec3aa13b45608.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值