php7安装xhprof并初试分析

一,git地址 :https://github.com/longxinH/xhprof

二,

cd xhprof/extension/
/usr/local/php/bin/phpize
./configure -prefix=/usr/local/related/xhprof --with-php-config=/usr/local/php/bin/php-config
make && make install

三,php.ini中

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

php.ini configuration

    Options      DefaultsVersionExplain
xhprof.output_dir  ""AllOutput directory
xhprof.sampling_interval  100000v2.*Sampling interval to be used by the sampling profiler, in microseconds
xhprof.sampling_depth  2147483647v2.*Depth to trace call-chain by the sampling profiler

 

对PHP进行性能分析

在XHProf扩展中,一共提供了四个函数用于对PHP进行性能分析。

xhprof_enable/xhprof_sample_enable函数用于开始XHProf性能分析,区别在于前者功能更加强大,而后者则是是以简单模式启动性能分析(简单记录了函数的调用栈信息),开销比较小。

xhprof_disable/xhprof_sample_disable函数用于停止性能分析,并返回分析的数据。

需要特别说明的函数是xhprof_enable,其他函数都是不需要提供参数的,而该函数则可以接受两个可选的参数,用于改变该工具的行为。

void xhprof_enable ([ int $flags = 0 [, array $options ]] )
  • flags 该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。

    • XHPROF_FLAGS_NO_BUILTINS 跳过所有的内置函数

    • XHPROF_FLAGS_CPU 添加对CPU使用的分析

    • XHPROF_FLAGS_MEMORY 添加对内存使用的分析

  • options 数组形式提供可选参数,在此处提供ignored_functions选项需要忽略的函数

比如下面的例子,同时对内存和CPU进行分析,并且忽略对call_user_funccall_user_func_array函数的分析。

xhprof_enable(
    XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,
    [
        'ignored_functions'    => [
            'call_user_func',
            'call_user_func_array'
        ]
    ]
);

// 这里是PHP代码,比如业务逻辑实现等要被分析的代码部分
....

$xhprofData = xhprof_disable();// $xhprofData是数组形式的分析结果
print_r($xhprofData);

注意,如果使用XHPROF_FLAGS_CPU选项对CPU占用也进行分析,在Linux环境下,会造成比较高的系统负载,因此不建议使用,而推荐只使用XHPROF_FLAGS_MEMORY,对内存的分析不会对系统造成太多负载。

形象化的查看分析结果

使用xhprof_disable完成性能分析并且获取到分析结果之后,我们通常不会直接输出结果,因为这样的结果是以数组形式组织的,看起来并不直观,幸运的是,xhprof提供了基于web的图形界面对分析结果进行查看。

在使用之前,请先确保服务器安装了graphviz工具,否则在生成监控图表的时候回出现以下错误:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

这里提示找不到dot命令,所以需要先安装graphviz

$ sudo yum install graphviz -y

由于分析结果的查看工具是基于web的,因此,我们需要将xhprof安装包中的xhprofhtmlxhproflib目录放到服务器的web目录下,让xhprof_html目录中的内容对外可以访问。

访问地址为http://localhost/xhprof/xhprof_html/index.php.

当然,配置好环境之后,我们还是获取不到分析结果的,因为我们在代码中并没有将分析结果保存到xhprof.output_dir指定的目录中。

因此,我们需要修改我们的代码,是其能够将分析结果存放到xhprof.output_dir指定的目录中。

....
$xhprofData = xhprof_disable();
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php';
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php';

$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');

echo 'http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';

变量$runId是本次请求生成分析结果的id,最后我们输出了一个链接地址,使用改地址就可以看到本次请求的分析结果。

分析结果

注意到中间的View Full Callgraph链接,通过该链接我们可以看到图形化的分析结果。

图形化分析结果

图中红色的部分为性能比较低,耗时比较长的部分,我们可以根据根据哪些函数被标记为红色对系统的代码进行优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值