查看php代码的性能——xhprof

标签: PHP php | 发表时间:2012-04-18 14:06 | 作者:陈 云飞
出处:http://www.cloudfly.info

今天是头脑风暴,想测试一下现在做得项目的执行效率。google了一下,发现了xhprof,试了一试,感觉真是个神器啊。在这里记录一下。

介绍

就是facebook放出的一个开源的,用来测试php代码性能的工具。在网上也搜到了Xdebug,但是都说特别耗资源。而xhprof是个轻量级的,而且用户体验也相当不错。那图看着,就是舒坦。

xhprof的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#下载xhprof
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
#解压
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2

#把这两个目录复制到website目录,把后面的/var/www/xhprof更换成自己的目录
#ubuntu的web目录就是/var/www
cp -r xhprof_html xhprof_lib /var/www/xhprof/

cd extension
#如果这个命令不存在,按照提示安装php-dev
phpize

#这里是要配置一下,后面的<path to php-config>也要根据自己的系统情况来设定,
#可以用whereis php-config 命令来查找下那个目录,我的是/usr/bin/php-config
./configure --with-php-config=<path to php-config>
#下面是安装,如果出错了就用root权限执行
make
make install

配置xhprof

修改php.ini

1
2
3
4
5
6
7
8
9
10
[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=<directory_for_storing_xhprof_runs>
;注:这里的<directory_for_storing_xhprof_runs>也要换成自己的目录,就是分析日志目录,自己建一个
;该目录是用来保存测试数据的,xhprof是先把测试数据保存到一个文件,然后在用一个程序打开并把数据显示出来

安装graphviz

实际上不安装这个也行,完成上面的步骤,重启下服务器就行了,但是为了看着舒坦嘛,xhprof会用graphviz生成出来一个图,让测试数据看起来更舒服。

1
2
3
4
5
6
7
#下载
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make
make install

使用xhprof

注意:使用前你得重启apache服务,你可以用phpinfo()来查看一下xhprof安装成功没有。

示例代码:

注:代码中的路径需要根据自己情况修改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
//开始xhprof的性能测试
xhprof_enable();

/**********************被测试的代码*****************************/
function haha()
{
    $sum = 0;
    for($i = 0;$i < 1000;$i++)
    {
        $sum += 1;
    }
    return $sum;
}

function hehe()
{
    $a = 0;
    for($j = 0;$j < 20;$j++)
    {
        $a += haha();
    }
    return $a;
}

echo hehe();

/************************测试代码完毕*******************************/
//测试结束了,把测试数据放到$data变量中
$data = xhprof_disable();

//把xhprof工具include进来
$xhprof_utils = realpath('/var/www/xhprof/xhprof_lib/utils');
include_once $xhprof_utils . "/xhprof_runs.php";
include_once $xhprof_utils . "/xhprof_lib.php";
//新建一个xhprofruns对象,
$xhprof_run = new XHProfRuns_Default();

//保存本次的测试数据,第一个参数是数据,第二个参数是保存文件的后缀名,
//这里返回值是本次测试的id,其实也就是本次测试数据保存的文件名字
$run_id = $xhprof_run->save_run($data,'hx');

//生成一个查看链接,
echo '<a target = "_blank" href = "http://localhost/xhprof/xhprof_html/index.php?run='.$run_id.'&source=hx">profile result</a>';

稍微解释一下把:
xhprof用xhprof_lib下的程序将测试数据把存到文件里,看那个include的路径,是安装的时候让你cp过去的。他会把文件保存到你php.ini里设置的路径下,上面也是你配置的。
之后生成的链接指向的也是xhprof自己的程序,也是安装时cp过去的,加了两个get参数,run为本次测试的id(也是文件名),source是保存文件的后缀。

运行结果展示

点击那个链接后效果如下图

点击那个[View Full Callgraph],会是下面这个页面,这就是用graphviz生成出来的图。

其他

这里只是简单介绍了一下xhprof的使用,因为我只研究到这,默认的这样已经可以满足我的需求了,它使用时还有挺多设置的。更详细的可参考下的两个网址

英文文档: http://mirror.facebook.net/facebook/xhprof/doc.html
中文文档: http://www.162cm.com/p/xhprofdoc.html

相关日志

相关 [php 代码 性能] 推荐:

查看php代码的性能——xhprof

- - cloudfly
今天是头脑风暴,想测试一下现在做得项目的执行效率. google了一下,发现了xhprof,试了一试,感觉真是个神器啊. 就是facebook放出的一个开源的,用来测试php代码性能的工具. 在网上也搜到了Xdebug,但是都说特别耗资源. 而xhprof是个轻量级的,而且用户体验也相当不错. 官方地址: http://pecl.php.net/package/xhprof.

PHP项目性能优化

- - SegmentFault 最新的文章
PHP项目性能优化的三个层次. PHP周边(服务器,数据库,webserver). 尽量使用PHP原生函数和常量,类. 如果要实现的功能有原生PHP函数,则不要自己用PHP实现. 尽量使用性能更高的内置函数. 比如isset和array_key_exists都可以使用,则使用isset. 尽量不要使用错误抑制符@.

10个实用的PHP代码片段

- - ITeye资讯频道
作为一个PHP开发人员,经常收集一些代码片段是非常有益的,以备将来使用. 这些代码片段可以节省您宝贵的时间,也可以提高您的工作效率.  PHP数组生成 CSV 文件. 这的确是一个很简单的功能,从一个PHP数组生成一个.csv文件. 此函数使用 fputcsv PHP 内置函数生成逗号分隔文件(.CSV).

PHP代码优化24条真经

- - 外刊IT评论
使用echo的多重参数代替字符串连接. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替. 对global变量,应该用完就unset()掉. 用单引号代替双引号来包含字符串,这样做会更快一些. 因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 函数代替正则表达式完成相同功能.

PHP性能监控测试----Xhprof

- - CSDN博客架构设计推荐文章
开始工作到现在,除了做新手任务,基本上都是和服务器端打交道,做前端的时间很短. 目前公司的性能监控和测试:Xhprof和ab测试. Xhprof----facebook开源的,轻量级的PHP性能分析工具: 包括函数的调用次数,花费的时间(自身花费时间和包含内部函数花费的时间),所占内存/CPU,所占内存的峰值及所占百分比.

HHVM 是如何提升 PHP 性能的?

- - 码农网
HHVM 是 Facebook 开发的高性能 PHP 虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题:. 它为什么比官方的 PHP 快很多. 在讨论 HHVM 实现原理前,我们先设身处地想想:假设你有个 PHP 写的网站遇到了性能问题,经分析后发现很大一部分资源就耗在 PHP 上,这时你会怎么优化 PHP 性能.

php类方法在线性能测试

- - CSDN博客编程语言推荐文章
在两个月前一个群里的朋友问了一个问题,他说:“现在他们公司的项目有一个模块的性能在线表现非常差,很长时间没有查出问题所在,老板一怒之下让他把所有类方法的执行时间给记录进行分析,并且不能影响现在的项目性能. ”老板让他记录这些信息是为了分析具体影响性能的地方在哪些地方,待项目运行一段时间就去除. 这个需求导致两个个问题,第一是怎么监听这个模块所有类方法的执行时间,第二是怎么能在不影响现在项目性能的情况下完成(本身性能就很差了),下面我们就这两个问题来分析:.

PHP分页技术的代码和示例

- xx - 酷壳 - CoolShell.cn
本文来自:10 Helpful PHP Pagination Scripts For Web Developers. 分页是目前在显示大量结果时所采用的最好的方式. 有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据. 在互联网上,分​页是一般用于搜索结果或是浏览全部信息(比如:一个论坛主题).

关于PHP的is_a()函数执行代码的问题

- Sam - 大风起兮云飞扬
    今天看到云舒在群里贴的漏洞公告,原始的文章在.     后来查了下PHP官方的手册,这个问题是在PHP 5.3.7中更新了is_a()函数的功能. is_a()经常被用于条件判断.     在此前版本的is_a() 的第一个参数如果不是object,则会返回false,现在变成了如果不是object ,则会去执行 __autoload()函数.

使用PHP解析行政区划代码

- - 火丁笔记
话说这个PHP脚本我已经写过好多次了,不过由于 国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质. 准备工作:需要下载 最新县及县以上行政区划代码,并保存成data.txt文件. 需要注意的是表的字符集和文件的字符集需要一致.