使用xhprof对php7程序进行性能分析

Xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug相似,但性能开销更低,还能够用在生产环境中,也能够由程序开关来控制是否进行profile。php

对于还在使用php5的朋友们,能够安装pecl的xhprof扩展html

http://pecl.php.net/package/xhprof

可是由于长时间不更新,针对php7已没法正常安装,可使用下的地址git

https://github.com/longxinH/xhprof/releases

  

1、安装xhprofgithub

下载xhprof源码php7

wget https://github.com/longxinH/xhprof/archive/v2.1.0.tar.gz

解压源码包svg

tar xf v2.1.0.tar.gz

进入目录函数

cd xhprof-2.1.0/extension

运行phpize,请自行修改大家的phpize路径工具

/data/nmp/php7/bin/phpize

运行configure,请自行修改大家的php-config路径gitlab

./configure --with-php-config=/data/nmp/php7/bin/php-config

编译安装性能

make && make install

修改php.ini配置,若是extension_dir配置了就不用再配置了,若是没配置,则把该目录指向,扩展编译安装后显示的路径。

extension_dir = "/data/nmp/php7/lib/php/extensions/no-debug-zts-20170718"

[xhprof]
extension = xhprof.so
xhprof.output_dir = /tmp/xhprof

  

2、配置xhprof

咱们把扩展目录下的xhprof_html和xhprof_lib复制出来,单独存放到一个目录中。

cp -a xhprof_html /data/wwwroot/xhprof
cp -a xhprof_lib /data/wwwroot/xhprof

针对要分析的项目,能够把以下代码添加到入口文件中:

//开启性能分析
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//php停止时运行的函数
register_shutdown_function(function () {
    //中止性能分析
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')) {
        fastcgi_finish_request();
    }
    //引入xhprof库文件,路径请自行修改
    $XHPROF_ROOT = realpath(dirname(__FILE__) . '/xhprof');
    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    //导出性能分析数据,默认xhprof.output_dir指定的目录
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});

数据默认会导出到xhprof.output_dir指定目录,因此需建立该目录,并给予相关权限  

mkdir /tmp/xhprof
chmod -R 777 /tmp/xhprof

这里咱们写一个简单程序进行一下演示  

<?php

error_reporting(E_ALL);
ini_set('display_errors', 'on');

//开启性能分析
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//php停止时运行的函数
register_shutdown_function(function () {
    //中止性能分析
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')) {
        fastcgi_finish_request();
    }
    //引入xhprof库文件,路径请自行修改
    $XHPROF_ROOT = realpath(dirname(__FILE__) .'/xhprof');
    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    //导出性能分析数据,默认xhprof.output_dir指定的目录
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});


function a()
{
    echo 'aaa';
    sleep(1);
    b();
}

function b()
{
    echo 'bbb';
    sleep(3);
    c();
}

function c()
{
    echo 'ccc';
    sleep(5);
}

a();

  

3、配置虚拟主机,用来查看分析日志

server {
    listen       80;
    server_name  xhprof.xxx.com;
    charset utf-8;
 
    root   /data/wwwroot/xhprof/xhprof_html;
    index  index.html index.htm index.php;

    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;
    }
}

咱们能够经过访问xhprof.xxx.com来查看分析日志了。

若是点击 [View Full Callgraph] 没法查看,则需装以下工具:

yum install -y libpng
yum install -y graphviz

若是上面安装完后,仍是没法显示,并报以下错误:

failed to execute cmd: " dot -Tpng". stderr: `Format: "png" not recognized. 
Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot '

咱们须要手动安装 graphviz

https://graphviz.gitlab.io/_pages/Download/Download_source.html

下载源码包,并编译安装

tar xf graphviz.tar.gz
cd graphviz-2.40.1
./configure
make
make install
相关文章
相关标签/搜索