剖析开拓环境下实行是否会慢;
如果是代码问题,在开拓环境下就能检测出来;
剖析预发环境实行是否会慢;
如果是数据库或者第三方扩展问题,在预发环境就能检讨出来。
从生产环境摘一台机器,剖析代码实行慢的缘故原由;
如果是机器的问题,在生产环境就能检讨出来。
1,2,3步骤都须要去剖析代码,看哪部分实行韶光长。如果人工一句一句代码去排查,很随意马虎导致用户流失落。大多时候我们会利用第三方的剖析工具tideways或者xhprof来快速创造问题。选择哪一个工具比较好呢?xhprof虽然来自facebook但已经良久不更新,官方源已经显示This package is abandoned and no longer maintained(此包已废弃,不再掩护)。tideways恰好相反,一贯有商业公司在掩护,并且积极的支持了PHP7。两个扩展都是开源的,综上所述我建议大家选择tideways来剖析代码。
tideways扩展能把每条要求天生详细的实行日志,我们通过对日志做大略的剖析就能看到程序哪部分耗时最长,这里可以利用xhprof的UI程序(xhprof天生的日志和tideways天生的日志格式通用),交互虽然不大友好但是够用了。如果想有更好的视觉效果,建议下载xhgui,一款基于Bootstrap的xhprof UI程序。
在开始搭建PHP非侵入式监控平台之前,我须要阐明几个问题。
一. Tideways这家公司如何盈利?
Tideways这家公司与Sentry的营销模式一样,都是卖存储做事+数据剖析做事。
tideways.so扩展是开源的,可以免费利用。但是tideways.so扩展只能天生日志文件,我们得到日志文件后还须要花很永劫光去整理和剖析。如果你购买了Tideways的做事,就能无缝的将日志存储到他们的做事器,登录他们供应的后台就能看到项目代码和做事器的运行状况。加上各种可视化的图表展示,体验非常的好,有很多大公司乐意付费。
二. 安装扩展后代码改动会不会很大?
tideways.so扩展供应的监控办法是非侵入式的监控,不会对当前项目有任何的影响。我们只须要在Nginx配置文件中加上一行配置即可:
fastcgi_param PHP_VALUE \"大众auto_prepend_file=/home/admin/xhgui-branch/external/header.php\"大众;
代码的含义:在实行主程序前都运行我们指定的PHP脚本
详细如何安装这个做事,我在文章的下半部分会详细解释。现在我们须要知道『非侵入式的监控』便是不用改动一行项目代码。
三. 每个要求都天生日志会不会影响做事本身?
用户的每次要求都天生实行日志对做事会有轻微的影响。虽然tideways.so扩展供应的监控办法是非侵入式的不会影响线上项目,但对CPU和内存的花费是不可忽略的。为了减少对内存和CPU的花费,我们可以掌握天生日志的频率,还能编写天生日志的规则。默认频率为1%(每100个要求天生1条日志,这里的概率非绝对)。
如果有多台做事器,只须要对一台进行监控,机器比较多的话可以每个机房一台。
搭建非侵入式监控环境
安装PHP mongodb扩展;
sudo pecl install mongodb
安装PHP tideaways扩展;
tideaways的文档写的非常详细,安装tideaways扩展(官方文档) 这里我用Centos举例。
PS: MarkDown的语法转换可能有部分问题,随意马虎把中划线转没了,这里建议安装时从官网COPY命令,安装tideaways扩展
echo \"大众[tideways] name = Tideways baseurl = https://s3-eu-west-1.amazonaws.com/qafoo-profiler/rpm\"大众 > /etc/yum.repos.d/tideways.repo
rpm --import https://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages/EEB5E8F4.gpg
yum makecache --disablerepo= --enablerepo=tideways
yum install tideways-php tideways-cli tideways-daemon
修正php.ini文件;
我们须要在php.ini文件中引入扩展
[mongodb]extension=mongodb.so[tideways]extension=tideways.so;不须要自动加载,在程序中掌握就行tideways.auto_prepend_library=0;频率设置为100,在程序调用时能改tideways.sample_rate=100IniCopy
安装mongodb-server(可选择安装mongodb客户端);
我们须要在系统中安装mongodb-server,用来存储tideways扩展天生的日志。多台做事器也只须要安装一个mongodb-server,用来做日志归拢。如果有单独的mongodb机器,可以跳过这一步。
Centos下安装MongoDB做事:
sudo yum install mongodb-server
启动做事:
sudo service mongod start
Centos下安装MongoDB客户端:
sudo yum install mongodb
安装xhgui;
git clone https://github.com/laynefyc/xhgui-branch.gitcd xhgui
PS: xhgui官方版本已经良久不更新,很多符号和单位都不适宜中国用户。为了方便自己,我单独掩护了一个版本,不断的在更新中。安装这个版本,将有更好的体验。须要安装原版的请实行下面的命令
git clone https://github.com/perftools/xhguicd xhgui
如果你的MongoDB安装在当前机器,可以不用修正xhgui的配置文件,如果不是你须要在配置文件中修正MongoDB的连接ip和域名,xhgui-branch/config/config.default.php。当然你也可以选择直接存为文件。
// Can be either mongodb or file./
测试MongoDB连接情形并优化索引;
你在当前机器安装过mongo客户端才能调用mongo命令。
$ 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 } )BashCopy
配置Nginx;
Nginx须要加入两处配置,一个是PHP_VALUE:
server {
另一个是须要配置一个路径指向5中安装的xhgui的webroot目录,如下配置为单独申请了一个域名:
server {
如果安装很顺利,此时访问 http://blog110.it2048.cn 能看到效果。详细的效果图可以看这里 https://github.com/laynefyc/xhgui
首页截图
瀑布图
函数监控图
末了我们来说说频率如何配置,还是在xhgui的config/config.default.php文件中
profiler.enable => function() {
数据存储到MongoDB之后,UI如何展示须要我们自己探究。比如将英文换成中文,添加曲线图和饼图等等。至此已经能实时监控我们项目的CPU、内存的花费情形。哪些接口实行慢也能一览无余。https://github.com/laynefyc/xhgui-branch 这是我掩护的一个xhpui汉化版本,欢迎利用和 提建议