使用XHProf分析PHP性能瓶颈(二)
上一篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来。本篇文章将讲述2个知识点:
- 使用xhgui代替xhprof的默认UI界面,更便于分析
- 使用tideways扩展替换xhprof扩展
使用更漂亮的UI: xhgui
xhgui支持 XHProf, Uprofiler或者Tideways 扩展,也就是说,只要安装了这几种扩展中的一种即可。
本次测试中,实际使用了tideways扩展(切换为XHProf扩展后web里看不到数据,原因未知。切换为Uprofiler也没有数据。)。
xhprof虽然来自facebook但已经很久不更新,官方源已经显示This package is abandoned and no longer maintained(此包已废弃,不再维护)。tideways恰好相反,一直有商业公司在维护,并且积极的支持了PHP7。两个扩展都是开源的,综上所述我建议大家选择tideways来分析代码。
安装tideways扩展:
wget https://github.com/tideways/php-xhprof-extension/archive/v4.1.5.tar.gz -O php-xhprof-extension-4.1.5.tar.gz
tar xzf /php-xhprof-extension-4.1.5.tar.gz
cd php-xhprof-extension-4.1.5
phpize
./configure
make && make install
安装xhgui
cd /work/
git clone https://github.com/perftools/xhgui.git xhgui
如果需要安装中文界面的,可以:
git clone https://github.com/laynefyc/xhgui-branch.git xhgui
然后安装xhgui依赖:
cd xhgui
php install.php
安装需要等待几分钟,请耐心等待。
设置缓存目录的权限,允许nginx创建文件:
chmod -R 777
xhgui已经把注入入口文件都写好了,位于external/header.php,无需我们手动去写类似上一篇的xhprof.inc.php注入文件。
安装MongoDB及客户端
xhgui 把日志写到了MongoDB,所以使用xhgui需要安装MongoDB服务端。此处省略安装、启动MongoDB服务端过程。
为提高 MongoDB 的性能,你可以运行以下指令以添加索引:
$ /usr/local/mongodb/bin/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 } )
同理,由于xhgui是PHP写的,还需要读取MongoDB里的数据,需要安装MongoDB php 客户端:
pecl install mongodb
然后在php.ini文件添加配置:
[mongo]
extension=mongo.so
查看扩展是否安装成功:
php -m | grep mongo
然后重启php-fpm服务。
配置xhgui
xhgui的config目录有一个config.default.php,复制为config.php,如果mongodb地址不是默认的,修改:
'db.host' => 'mongodb://127.0.0.1:27017',
还有修改采样频率,默认是1/100,测试的话改为true:
'profiler.enable' => function() {
//return rand(1, 100) === 42;
return true;
},
配置项目注入
上一篇文章中,我们介绍到,注入的入口文件可以写到php.ini或者nginx,我建议写在nginx配置,这样只会影响该nginx对应的项目,而不是所有使用该php环境的项目。入口文件使用xhgui自带的注入文件:
jifen.cc.conf
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "auto_prepend_file=/work/xhgui/external/header.php";
include fastcgi_params;
}
配置xhgui web
我们修改xhprof.test.com.conf为:
server {
listen 80;
server_name xhprof.test.com;
#root /work/xhprof/xhprof_html;
root /work/xhgui/webroot/;
index index.php index.html;
location / {
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启nginx服务。
我们请求几次应用的接口,打开浏览器输入http://xhprof.test.com/,可以看到:

点击某次请求进去看详情:

参考
1、PHP性能追踪及分析工具xhprof的安装与使用 - 马新才的技术博客 - SegmentFault 思否
https://segmentfault.com/a/1190000007288664#articleHeader4
2、Tideways和xhgui打造PHP非侵入式监控平台 | 我是大熊
http://blog.it2048.cn/article-tideways-xhgui/
使用XHProf分析PHP性能瓶颈(二)的更多相关文章
- 使用XHProf分析PHP性能瓶颈(一)
安装xhprof扩展 wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0.9.4.tgz cd xhprof-0.9.4/ex ...
- 安装XHProf分析PHP性能瓶颈(原创)
废话不多说,直接上代码 ,手动滑稽.o(╯□╰)o 如果已解决您的问题,请在文章底部点击下关注,非常感谢. 下面是LINUX命令行 $ wget http://pecl.php.net/get/x ...
- iOS----- Crash 分析(文二)-崩溃日志组成
iOS Crash 分析(文二)-崩溃日志组成 现在我们看一个淘宝iOS主客崩溃的例子: ### 1.进程信息 ### Incident Identifier: E4201F10-6F5F-40F9- ...
- 手机自动化测试:appium源码分析之bootstrap二
手机自动化测试:appium源码分析之bootstrap二 在bootstrap项目中的io.appium.android.bootstrap.handler包中的类都是对应的指令类, priva ...
- 使用 XHProf 分析你的 PHP 程序
个人说明: 注意: php5.5运行 xhprof_enable 会发生段错误Segmentation fault: ,这是一个已知的bug. 下面是报错测试脚本: function loader( ...
- 【RxJava Demo分析】(二)Schedulers线程调度器 · Hans Zone
用Schedulers(调度器)实现多任务(并发,Concurrency)的例子 废话不多说我们看一下有关于RxJava的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 使用XHProf查找PHP性能瓶颈
XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法. 一.安装Xhprof扩展 //github上下载ht ...
- 使用xhprof分析php代码性能
推荐在Linux平台使用xhprof,win下xhprof目前稳定版本在php5.5 安装xhprof 下载地址 http://pecl.php.net/get/xhprof-0.9.4.tgz 与p ...
- 使用xhprof分析php性能
今天偶然发现 xhprof可以远程分析php代码性能,大致步骤如下 1. 进入 xhprof , 点击右上角注册 并 登陆, 网站左侧解释了如何在本地安装测试xhprof, 我用的是右侧的图表模式, ...
随机推荐
- (NO.00001)iOS游戏SpeedBoy Lite成形记(九)
我们回到matchRun方法中去尝试第一次修改,部分代码如下: CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration ...
- ShapeDrawable做放大镜效果
引用一下ShapeDrawable的类的说明: java.lang.Object ? android.graphics.drawable.Drawable ? android.grap ...
- mysql进阶(七)limit的用法
limit是mysql的语法 select * from table limit m,n 其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条. select * ...
- android Timer与TimerTask的相关操作
项目上面的部分操作需要使用到定时器进行周期性的控制.网络上面对于定时器的操作通常有三种实现方法. 我是通过Timer与TimerTask相结合实现的定时器功能.具体实现过程如下: 第一步,得到Time ...
- 【Visual C++】游戏编程学习笔记之二:定时器的使用
本系列文章由@二货梦想家张程所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44195831 作者:ZeeCode ...
- JS跨域请求
前提:两个项目,第一个项目想请求第二个项目不通过服务器代码只通过页面请求. 1. 第一个项目html(需要第二个项目配合实现) 1 2 3 4 5 6 7 <script> functio ...
- android studio比较长用的几款插件
不懂安装studio插件,看参考博文:android stuido插件安装:http://blog.csdn.net/liang5630/article/details/46372447 1.Butt ...
- 图片像素对比OpenCV实现,实现人工分割跟算法分割图像结果的对比
图片对比,计算不同像素个数,已经比率.实现人工分割跟算法分割图像结果的对比,但是只能用灰度图像作为输入 // imageMaskComparison.cpp : 定义控制台应用程序的入口点. // / ...
- GEFGWT的HelloWorld
发现一个好玩的东西,gef-gwt,使用它可以轻松的在web上建立gef程序,原文在这里http://gefgwt.org/getting-started/(文章虽然是英文,但是很容易懂,我是按部就班 ...
- PuTTY的下载安装和基本使用方法教程
PuTTY是一款开源(Open Source Software)的连接软件,主要由Simon Tatham维护,使用MIT许可证授权.包含的组件有:PuTTY, PuTTYgen,PSFTP, PuT ...