使用tideways+xhgui构建php非侵入式代码性能分析系统

之前做接口开发,通过记录接口响应速度,找出比较慢的接口,进行分析,定位问题从而达到优化接口的目的。但是存在一个缺点,只能找出比较慢的接口,具体定位不到实际的问题。

最近项目结束,希望在接口优化这一块有一个直观的数据参考。之前用过xhprof做个程序代码分析,觉得还不错。鉴于facebook对xhprof已经很久不更新(不过在gitgub上可以找到对PHP7的支持),网上也找个一些资料,觉得tideways还不错,决定也搭建一个。

先看一张梳理后的图:

环境信息

操作系统:Linux 14.04.1-Ubuntu 
    PHP:PHP 7.1
    Nginx:nginx/1.13 
    Mongodb: mongodb/3.2

搭建性能分析平台

1,下载:github.com/tideways/php

2,安装:常规的php扩展编译安装方式安装即可

3,配置:

tideways官网本身会提供一个强大的UI界面来展示分析视图,但是需要收费,我们使用的是xhgui来展示分析视图,所以就采用最简单配置方式,在php.ini中加入如下信息:

extension=tideways.so
    tideways.auto_prepend_library=0

(注:使用tideways UI配置可以参考官方文档 tideways.io/

二、xhgui安装

1,下载:github.com/perftools/xh
PS:xhgui官方版本已经很久不更新,很多符号和单位都不适合中国用户。github上找到一个汉化的版本,并且坚持在更新(感谢维护者)。安装这个版本,将有更好的体验。

git clone https://github.com/laynefyc/xhgui-branch.git
    cd xhgui-branch
    php install.php

如果你一定要安装原版在上面的命令中修改版本库地址即可。

三、安装mongodb
需要在系统中安装mongodb,用来存储tideways扩展生成的日志。
1.mongodb-server安装

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org=3.2.12 mongodb-org-server=3.2.12 mongodb-org-shell=3.2.12 mongodb-org-mongos=3.2.12 mongodb-org-tools=3.2.12

2.php mongodb扩展安装

使用pecl或者常规的PHP编译安装扩展方式安装成功即可。

sudo pecl install mongodb

可能出现的错误:

configure: error: Cannot find OpenSSL's libraries

执行下面命令即可:

apt-get install libcurl4-openssl-dev libpcre3-dev

四、配置


  1. 将xhgui项目目录中的cache文件夹权限设置成 0777
  2. 启动mongodb并设置xhgui索引,命令如下:
$ 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 } )

3. xhgui站点配置

server {
     listen 80;
     server_name wfl.xhgui.com;//你的站点名称
     root "/data/www/xhgui-branch/webroot/";
     index index.php index.html index.htm;
     charset utf-8;
     location / {
         try_files $uri $uri/ /index.php?$query_string;
     }
     access_log /data/log/nginx/xhgui-access.log;
     error_log  /data/log/nginx/xhgui-error.log error;
     sendfile off;
     client_max_body_size 100m;
     include fastcgi.conf;
     location ~ /\.ht {
         deny all;
     }
     location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000;
         #fastcgi_pass /run/php/php7.0-fpm.sock;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
     }
    }

4. 针对要分析的站点进行设置,直接在要分析站点的nginx配置中增加以下项,然后使配置生效就可以了。

fastcgi_param PHP_VALUE "auto_prepend_file=/data/www/xhgui-branch/external/header.php";

根据自己安装的路径进行相应的调整。

5. 重启nginx,php-fpm即可。

下面是效果图:

首页截图

函数监控图

火焰图

编辑于 2017-11-07