查看php代码的性能——xhprof

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

介绍

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

  • 官方地址: http://pecl.php.net/package/xhprof
  • github地址: https://github.com/facebook/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的session学习
  • php抓取网络词典数据,实现在终端查询单词的功能
  • PHP程序员最常犯的11个MySQL错误[转]
  • PHP中array和stdClass 的赋值问题
  • 破解简单的纯数字验证码
  • ubuntu 下phpdoc生成文档的乱码
  • php图片上传+通过url下载图片到服务器+为图片生成缩略图
  • 制作网页中的一些小动作(更新中……)
  • require()和include()函数的区别
  • 使用PHP访问数据库

你可能感兴趣的:(PHP,PHP)