xhprof性能分析工具安装与使用

前言

性能分析是衡量应用程序在代码级别的相对性能。性能分析将捕捉的事件包括:CPU的使用,内存的使用,函数的调用时长和次数,以及调用图。性能分析的行为也会影响应用性能。

在 PHP 世界里,有两个截然不同的的性能分析器——主动和被动。

主动 VS 被动性能分析

主动分析器在开发过程中使用,由开发人员启用。主动分析器收集的信息比被动分析器多,对性能的影响更大。通常,主动分析器不能用在生产环境中。XDebug 就是一种主动分析器。

因为无法在生产环境中使用主动分析器,Facebook 推出了一个被动分析器——XHProf。XHProf 是为了在生产环境中使用而打造的。它对性能的影响最小,同时收集足够的信息用于诊断性能问题。

XDebug适用于开发环境,XHprof更适用于生产环境。


安装

下载地址:http://pecl.php.net/package/xhprof

1.wget http://pecl.php.net/get/xhprof-2.2.0.tgz

2.tar -zvxf xhprof--2.2.0.tgz

3.cd xhprof--2.2.0

4.cd extension/

5.开始安装php扩展 phpize

6../configure --with-php-config=/usr/local/php/bin/php-config  (这里php-config的路径以你的配置为准,不知道的可以php -i查看下)

7.make && make install

8.修改php.ini文件

加入配置

[xhprof]
extension=xhprof.so
xhprof.output_dir=/www/wwwroot/yourwebpath/public/xhprof

xhprof.output_dir指定概要分析文件的存放路径。

9.重启php-fpm使用php -m 查看已加载扩展

xhprof性能分析工具安装与使用_第1张图片

安装成功!

配置分析结果网站 

1.新建一个站点 设置一个可用的端口

2.将解压出来的安装包中的xhprof_html和xhprof_lib文件夹拷贝到站点根目录

访问可以使用ip:端口/xhprof_html/index.php 检查是否配置成功

项目集成

以thinkphp5为例

1.在application/config.php中指定xhprof的相关配置信息,以便更方便的动态管理xhprof

'xhprof'=>[
        'enable'=>true,
        'name'=>'mysite',//多项目用
        'code'=>'mycode',
        'domain'=>'' //分析结果展示域名 需要家端口号,前面配置过的
    ]

2.在application/tags.php配置行为扩展文件

'app_init'     => [
        'app\\common\\behavior\\XhprofEnable',
    ],
'app_end'      => [
        'app\\common\\behavior\\XhprofDisable',
    ],

3.application/commo/behavior/XhprofEnable.php

php


namespace app\common\behavior;


class XhprofEnable
{
    public function run(&$params) {
        if(config('xhprof.enable') && input('code') == config('xhprof.code')
            && input('DEBUG_PROFILE') && extension_loaded('xhprof')
        ) {
            require_once EXTEND_PATH.'xhprof_lib/utils/xhprof_lib.php';//这里需要注意的是将xhprof_lib文件夹拷贝到网站的能访问到的目录,我这里是放在了项目的extend目录下
            require_once EXTEND_PATH.'xhprof_lib/utils/xhprof_runs.php';
            xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
        }
    }
}

4.application/commo/behavior/XhprofDisable.php

php


namespace app\common\behavior;


class XhprofDisable
{
    public function run(&$params) {
        if(config('xhprof.enable') && input('code') == config('xhprof.code')
            && input('DEBUG_PROFILE') && extension_loaded('xhprof')
        ) {
            $ns = config('xhprof.name') ?: 'myxhprof';
            $xhprofData = xhprof_disable();
            $xhprofRuns = new \XHProfRuns_Default();
            $runId = $xhprofRuns->save_run($xhprofData, $ns);
            $url = config('xhprof.domain').'/xhprof_html/index.php';
            $url .= '?run=%s&source=%s';
            $url = sprintf($url, $runId, $ns);
            echo '$url.'" target="_blank">查看分析结果';
            exit;
        }
    }
}

至此全部配置完毕

在浏览器中输入需要分析的地址加上&DEBUG_PROFILE=1&code=config中配置的code码

点击查看如果是按照我这样配置可能会出现404,临时解决办法去掉链接中的域名只保留ip部分

xhprof性能分析工具安装与使用_第2张图片

点击view full Callgraph可查看详细的调用图,很直观

xhprof性能分析工具安装与使用_第3张图片

你可能又报错了

说先你得在服务器上安装graphviz

//红帽系列
yum install graphviz
//Ununtu
apt-get install graphviz
//OS X
brew install graphviz

然后修改php.ini文件 disable_functions中把proc_open去掉,重启php-fpm,再打开浏览器,大功告成

最后,在分析带有smarty模板缓存的页面时可能用不了,这玩意应该适用于api接口性能的分析

参考文档:

PHP性能分析介绍:XHprof&XHGui,http://blog.oneapm.com/apm-tech/235.html

XHprof安装和使用,http://www.lanecn.com/article/main/aid-58

XHprof报告字段含义,https://blog.csdn.net/wide288/article/details/50427438

XHprof报告性能图报错,https://blog.csdn.net/jo_andy/article/details/78526487

 

你可能感兴趣的:(xhprof性能分析工具安装与使用)