xhprof性能工具的使用

xhprof性能工具的使用

xhprof介绍

xhprof是php的性能分析工具之一,它是一个轻量级的性能分析工具,是facebook开发的并且开源的工具,具有很好的图形分析界面; 常用的性能分析工作还有好多,如xdebug、oneAPM等。

xdebug是大家比较常用的性能分析工具,但是其运行在线上占用的系统资源比较高,所以不推荐大家线上使用,现在使用还是很推荐的;

oneAPM是国产的性能分析工具,安装部署使用都很简单,但是需要收费;

xhprof下载

官方git地址: https://github.com/phacility/xhprof 

官方gif地址目前PHP7的版本安装不成功,如果您是PHP7的版本可以使用如下地址下载:

git clone https://github.com/longxinH/xhprof

注:将下载的xhprof相关文件放到web根目录中,以便后续执行。

xhprof安装

切换到xhprof的extension目录

cd xhprof/extension/

执行phpize来编译安装xhprof扩展

/usr/local/opt/php70/bin/phpize #phpize所在路径
./configure --with-php-config=/usr/local/opt/php70/bin/php-config
make && make install #编译安装

/usr/local/opt/php70/bin/php-config为您的php-config路径,如果您不知道其文件所在,可以使用如下命令查看:

which config-php

最后出现如下提示说明安装成功:

Installing shared extensions:     /usr/local/Cellar/php70/7.0.14_7/lib/php/extensions/debug-non-zts-20151012

配置php.ini

在php配置文件中添加如下代码

[xhprof]
extension = xhprof.so #添加xhprof扩展
xhprof.output_dir = your path #xhprof生成分析文件存储目录 根据自己的需要存放

重启PHP

sudo killall -HUP php-fpm #杀掉php-fom进程
brew services restart php70 #重启php

测试使用xhprof

执行xhprof/examples/sample.php文件,若执行后报如下错误:

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

则需要安装graphviz,命令如下:

brew install graphviz

再次执行,则会输出一个打印数组及查看分析结果的url地址;现在您可以去您指定的xhprof.output.dir中查看是否生成了一个扩展名为xhprof的分析文件,后边我们看到的分析结果都来源于此文件。

分析sample.php代码

首先定义了两个函数bar()foo(),用于分析。

接下来是开启分析代码,格式如下:

void xhprof_enable ([ int $flags = 0 [, array $options ]] )

flags 该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。
XHPROFFLAGSNO_BUILTINS 跳过所有的内置函数
XHPROFFLAGSCPU 添加对CPU使用的分析
XHPROFFLAGSMEMORY 添加对内存使用的分析
options 数组形式提供可选参数,在此处提供ignored_functions选项需要忽略的函数

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

以下代码用于关闭分析并将分析后的原始结果数据存储到亦是$xhprof_data中;

$xhprof_data = xhprof_disable();

到这里细心的小伙伴可能发现了调用foo方法的代码位于xhprof_enablexhprof_disable中间。

注:将分析的代码放到xhprof_enablexhprof_disable两个方法中间的区域;

包含xhprof的两个最主要文件xhprof_lib.phpxhprof_runs.php,对代码的分析由这两个文件完成;最后,创建一个XHProfRuns_Default类的对象并调用类内方法save_run方法将分析结果进行保存并生成一个运行的唯一ID,其第一个参数为分析结果原始数据,第二个参数xhprof_foo为保存文件名称,在文章的前边我让大家看过生成的文件,此次执行生成的文件名称为59c0da27cabe6.xhprof_foo.xhprof,其中59c0da27cabe6$run_id,xhprof_foo是什么不用我说大家也应该能够猜到吧!!!

$XHPROF_ROOT = realpath(dirname(__FILE__) .'/..');
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// save raw data for this profiler run using default
// implementation of iXHProfRuns.
$xhprof_runs = new XHProfRuns_Default();

// save the run under a namespace "xhprof_foo"
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

查看分析结果

在xhprof源里有一个xhprof_html目录,里边包含呈现分析结果的css、js及帮助文档,在sample.php的最后一行中输出中就有查询分析结果的url地址,地址执行的就是此目录中的index.php文件,并需要带上我们查看的结果run_id和我们所启的文件名称,如上边的xhprof_foo名称,此名称可以随意指定。因此我们一定要将我们下载的xhprof放到我们的web根目录下,否则无法查看分析结果。执行如下url地址:

http://jaleel.work.com/xhprof/xhprof_html/?run=59c0848913cde&source=xhprof_forloop&all=1

结果如下:

xhprof运行结果

单击页面中的[View Full Callgraph]可以查看分析结果的图形表现形式,具体效果如下:

xhprof图形结果

项目中使用xhprof

在实际项目中使用使用xhprof和sample.php文件基本类似,需要注意的是包含xhprof_lib.phpxhprof_runs.php的路径要是我们下载的xhprof的路径,这样才能使用xhprof进行分析;最后查看分析结果和上边一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值