使用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, 我用的是右侧的图表模式, ...
随机推荐
- 【一天一道LeetCode】#50. Pow(x, n)
一天一道LeetCode系列 (一)题目 Implement pow(x, n). (二)解题 题目很简单,实现x的n次方. /* 需要注意一下几点: 1.n==0时,返回值为1 2.x==1时,返回 ...
- 浅谈SystemClock 和Thead的区别和联系
其实将SystemClock 和Thead直接放在一起是不合适的,我们首先来看下他们所在的api. public final class SystemClock extends Object java ...
- Android中怎样获取SD卡路径
很多时候我们需要将我们的数据或者apk保存到SD卡中,但是使用绝对路径可能会遇到错误,怎样解决这个问题呢? 可以通过以下方法获取SD卡的路径: Environment.getExternalS ...
- 优秀设计师应当知道的20大UI设计原则
世界级图形设计大师Paul Rand(保罗.兰德)曾经说过:"设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美化,去赞美褒扬,使其 ...
- *** non-numeric second argument to `wordlist' function: ''. Stop错误解决办法
PS: 解决办法搜集自:stackoverflow website:http://stackoverflow.com/questions/5677178/ndk-gdb-fails-with-mess ...
- iOS中NSBundle的介绍
bundle是一个目录,其中包含了程序会使用到的资源.这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in).对应bundle,cocoa提供了类NSBund ...
- OpenCV——PS 滤镜, 浮雕效果
具体的算法原理可以参考: PS 滤镜, 浮雕效果 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITH ...
- iPhone实现自定义多选列表
好久没更新博客了,今天写了一个自定义的多选列表,可以跟爱学习的各位进行分享,首先我们先来看一下效果图: 一般大家都是用UITableView自己的编辑模式来实现CheckBox的,这里我们用自定义Ce ...
- javascript简单介绍
ECMAScript 1.语法 2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的.弱类型! 3.数据类型:原始数据类型(undefi ...
- 添加极光推送以及在ios中的问题
项目为 ionic1 + angular1 1.添加极光推送插件 用cordova进行添加 cordova plugin add jpush-phonegap-plugin --variable AP ...