查看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