php xhprof简明教程
2015-05-19 16:29
232 查看
xhprof是facebook开发的,用来对php程序进行profiling的。具体的就是给你展示下,每个函数运行了多长时间、消耗了多少内存。另外一个比较好的功能就是可以生成函数调用关系。这个对于梳理业务还有框架的原理都很有用。
可使用pear或者pecl安装,我目前使用的xhprf 0.9.4,有下面的要求
当然,如果你没有办法安装上面两个包管理工具,也可以从上面的地址下载安装包,然后自己编译。
在我的环境中,
根据php版本或平台的不同,请确保你的php可以加载编译出来的xhprof.so。在我的机器上,我手动添加了
文件内容:
其中
我使用的版本是
上面这三句话就是说打开xhprof,让其开始搜集数据。
xhprof_enable还可以指定其他的参数,具体的参数,大家可以到网上自行搜索啦。
而这三句话就是说,要结束我们的数据收集,把它写入文件。那么数据保存在哪里呢?还记得上面我们给php配置module是指定的xhprof.output_dir吗?对,数据就保存在那里面。
在我的环境中,我的项目使用了symfony1.4,而我希望它可以检测我所有的代码。这样,我就可以对它们逐一进行分析。
所以,在
header.php
footer.php
然后在symfony的layout.php文件里,把上面两个文件include进去。这样,symfony里面的每个页面都被xhprof监控了。
OK,这样来看,是不是会影响线上环境呢?应该不会,只要线上环境不安装xhprof这个模块,那么该功能就不会启用,也就不会有什么影响啦。
xhprof自带了一个数据查看程序,都是用php写的。
OK,在你的浏览器中输入
安装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简明教程
- PHP性能分析工具XHProf安装使用教程
- php trait 简明教程,多重继承的实现方案
- php性能分析工具XHProf安装配置使用教程(linux精华版)
- PHP性能分析工具XHProf安装使用教程
- php编译安装php-amq扩展简明教程
- PHP用thrift操作Hbase的简明教程
- PHP简明教程-面向对象基础 1
- phpDocumentor简明教程
- PHP简明教程-面向对象基础 2
- PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
- XHProf简明教程
- Linux/Unix系统下nginx+php安装简明教程
- php trait 简明教程,多重继承的实现方案
- PHP微信发红包简明教程
- Windows下安装Apache+PHP+MySQL简明教程
- php简明教程
- php简明教程
- php版银联支付接口开发简明教程
- PHP命名空间(Namespace)简明教程