您的位置:首页 > 编程语言 > PHP开发

php xhprof简明教程

2015-05-19 16:29 232 查看
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
就可以查看结果了,是不是很方便?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php xhprof