php xhprof简明教程

本文介绍了如何使用xhprof对PHP程序进行性能分析,包括安装、配置、启用、数据收集及查看结果的过程。通过xhprof,开发者能够获取到每个函数的运行时间和内存消耗情况,以及函数调用关系,为优化代码提供有力支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xhprof是facebook开发的,用来对php程序进行profiling的。具体的就是给你展示下,每个函数运行了多长时间、消耗了多少内存。另外一个比较好的功能就是可以生成函数调用关系。这个对于梳理业务还有框架的原理都很有用。

安装xhprof

xhprof

可使用pear或者pecl安装,我目前使用的xhprf 0.9.4,有下面的要求

PHP Version: PHP 5.2.0 or newer
PEAR Package: PEAR 1.4.0 or newer

当然,如果你没有办法安装上面两个包管理工具,也可以从上面的地址下载安装包,然后自己编译。

$ cd xhprof-0.9.4/extension
$ phpize
$ ./configure --with-php-config=/usr/local/bin/php-config
$ make
$ make test
$ make install

在我的环境中,make test一共有8个case,还是有一个case没有过的,不过我没有深究,依然还是make install了。希望在以后的版本中修改掉把。

根据php版本或平台的不同,请确保你的php可以加载编译出来的xhprof.so。在我的机器上,我手动添加了

/usr/local/etc/php/5.5/conf.d/ext-xhprof.ini

文件内容:

[xhprof]
extension="/usr/local/opt/php55-xhprof/xhprof.so"
xhprof.output_dir="/var/tmp/xhprof"

其中xhprof.output_dir指定了xhprof所抓取的运行时信息。

安装Libpng & Graphviz

为了显示函数调用关系,xhprof自带了一个网页,可以分析它所收集的数据,然后生成函数调用树。这个功能是要用到Graphviz,而Graphviz又要用到libpng,:)

我使用的版本是

graphviz : 2.38.0
libpng : 1.6.17

启用xhprof

include_once 'xhprof_lib/utils/xhprof_lib.php';
include_once 'xhprof_lib/utils/xhprof_runs.php';
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

上面这三句话就是说打开xhprof,让其开始搜集数据。
xhprof_enable还可以指定其他的参数,具体的参数,大家可以到网上自行搜索啦。

$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);

而这三句话就是说,要结束我们的数据收集,把它写入文件。那么数据保存在哪里呢?还记得上面我们给php配置module是指定的xhprof.output_dir吗?对,数据就保存在那里面。

在我的环境中,我的项目使用了symfony1.4,而我希望它可以检测我所有的代码。这样,我就可以对它们逐一进行分析。

所以,在apps/my_app_name/templates目录下,我添加了两个文件

header.php

<?php
if (extension_loaded('xhprof')) {
        include_once 'xhprof_lib/utils/xhprof_lib.php';
        include_once 'xhprof_lib/utils/xhprof_runs.php';
        xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
        echo 'xhprof loaded';
}

footer.php

<?php
if (extension_loaded('xhprof')) {
    $profiler_namespace = 'myproj';  // namespace for your application
    $xhprof_data = xhprof_disable();
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);
}

然后在symfony的layout.php文件里,把上面两个文件include进去。这样,symfony里面的每个页面都被xhprof监控了。

OK,这样来看,是不是会影响线上环境呢?应该不会,只要线上环境不安装xhprof这个模块,那么该功能就不会启用,也就不会有什么影响啦。

查看结果

数据室收集了,你去看上面收集的数据,都是json数据很不直观。
xhprof自带了一个数据查看程序,都是用php写的。

$ cd xhprof-0.9.4
$ php -S 0:8080 -t xhprof_html/

OK,在你的浏览器中输入localhost:8080就可以查看结果了,是不是很方便?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值