PHP性能被动分析工具之xhgui加tideways的安装实践
By:0x584A Date:2016-11-23 17:55:42
前言
最近一直想做个接口性能分析,但是手打log实在能把人给累死。怎么办呢?想到之前有写过一篇我所知道的PHP相关调优汇总,里面有一个Xdebug + kcachegrind
的调优方式。 但是呢,每次都需要将它产生的cachegrind.out.*
文件下到本地,再用kcachegrind
打开做分析,而且体验感也不是特别好(原谅我英语不过三的渣渣...)
性能分析的UI组合
-
uprofiler
点击下载 -
xhprof
+xhprof.io
【因年久失修,用uprofiler
替换即可或用修复板。支持保存分析数据至mysql,函数调用记录完整,内核级别函数都能显示,支持域名索引】修复板下载 -
xhprof
oruprofiler
ortideways
+xhgui
【推荐,保存数据至MongoDB,UI界面友好,有中文UI版,不支持域名索引对于线上调试支持较差】中文版下载,英文原版下载 -
tideways
【推荐,这个最绚的而且一直在持续维护。但是使用它酷炫的UI需要付费,扩展则不需要。】tideways下载地址
安装
-
环境
-
tideways
+xhgui
php>5.5
mongodb
php5-mcrypt
apt-get install libcurl4-openssl-dev libpcre3-dev
-
-
安装mongodb
前置需安装php-dev`sudo apt-get install php5-dev` ```shell $ sudo pecl install mongodb $ cd /etc/php5/mods-available $ sudo sh -c "echo 'extension=mongodb.so' > /etc/php5/mods-available/mongodb.ini" [sudo] 0x584A 的密码: $ cd ../fpm/conf.d $ sudo ln -s ../../mods-available/mongodb.ini 20-mongodb.ini $ sudo service php5-fpm restart $ sudo apt-get install mongodb -y ```
-
安装xhgui
$ git clone https://github.com/maxincai/xhgui.git $ cd xhgui $ php install.php
加索引
$ 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 } )
-
安装tideways
见该安装地址,选择系统安装方式`https://tideways.io/profiler/docs/setup/installation`
- 需要在nginx应用中加入
fastcgi_param TIDEWAYS_SAMPLERATE "25";
- 需要在nginx应用中加入
fastcgi_param PHP_VALUE "auto_prepend_file=/home/0x584A/www/xhgui/external/header.php";
- 需要在nginx应用中加入
-
ngxin应用配置
应用
server { listen 127.0.10.1:80; server_name app.com; root /home/0x584A/www/app; index index.html index.htm index.php; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?$1 last ; break; } } location ~ ^(.+\.php)(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param TIDEWAYS_SAMPLERATE "25"; fastcgi_param PHP_VALUE "auto_prepend_file=/home/0x584A/www/xhgui/external/header.php"; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $DOCUMENT_ROOT$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $DOCUMENT_ROOT/$fastcgi_script_name; include fastcgi_params; } }
xhgui
server { listen 127.0.10.2:80; server_name debug.com; root /home/0x584A/www/xhgui/webroot; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$uri&$args; } location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
访问配置好的页面即可。
注意
-
分析方式请自行更具url设置
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return True; }else{ // 1%采样 return rand(1, 100) === 42; } },
-
在xhgui的
config/config.default.php
中,可设置采样命中次数;-
return rand(1, 100) === 42;
为1%
的采样率,改成return True;
则标识每次都采样
-
-
分析参数过多则清除mongodb数据
$ mongo $ use xhprof; $ db.dropDatabase();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。