PHP性能检测与优化—XHProf 安装
XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开关来控制是否进行profile。
以下是我在虚拟机上安装的过程记录:
1、安装lampp
在虚拟机上安装lampp,必须是develop版本的。否则编译是通不过的。我就是因为编译时遇到 include php.h 时就失败了。所以需要先确保下载并安装了 xampp 的 devel packages。下载地址:http://www.apachefriends.org/download.php?xampp-linux-devel-1.7.4.tar.gz,然后解压到安装的目录tar -xvzf file -C /opt。下载 xampp 的 develop包的时候,注意要选择和自己当前的版本一致的 devel 包,因为 php 的扩展编译的时候,会附加版本信息,启动时进行检查,如果不一致,即便能够编译成功,也是不能够使用的。
2、安装xhprof
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxvf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib /opt/lamp/htdocs #应用程序所在目录,其中xhprof_lib是生成统计数据用到的类库。xhprof_html是查看统计数据的时候,用到的类库。
cd extension
/opt/lampp/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
sudo make
sudo make install
这时候so文件生成到了/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/这个目录下了。
附件:编译过的so文件
编译xhprof的时候出了很多问题,比如:
这个问题是需要安装http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz和autoconf
可查看http://tech.fblife.com/?p=106
3、修改php.ini配置
vi /opt/lampp/etc/php.ini
[xhprof]
extension=xhprof.so
xhprof.output_dir=/home/sharexie/xhprof //如果不加存放目录的话,默认是放在/tmp下面
重启lampp:
/opt/lamp/lamp restart
3、安装graphviz
cd /usr/src
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
4、安装libpng
上面的那个工具依赖libpng。到libpng官网down分源码,再次编译一下。
SF.NET上地址是 http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/,我下的是http://sourceforge.net/projects/libpng/files/libpng15/1.5.1/libpng-1.5.1.tar.gz/download
5、安装zlib
6、查看效果
测试代码
1 <?php 3 index(); 5 function index(){ 7 phpinfo(); 9 b(); 11 } 13 function b(){ 15 echo "i love you"; 17 } 19 //启动xhprof 21 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 23 //停止xhprof 25 $xhprof_data = xhprof_disable(); 27 //取得统计数据 29 print_r($xhprof_data); 31 $XHPROF_ROOT = realpath(dirname(__FILE__) . '/'); 33 echo $XHPROF_ROOT; 35 include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; 37 include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; 39 include_once $XHPROF_ROOT . "/xhprof_lib/utils/callgraph_utils.php"; 41 //保存统计数据,生成统计ID和source名称 43 $xhprof_runs = new XHProfRuns_Default(); 45 print_r($xhprof_runs); 47 $run_id = $xhprof_runs->save_run($xhprof_data, "test"); //source名称是xhprof_foo 49 //弹出一个统计窗口,查看统计信息 51 echo "<script language='javascript'>window.open('../xhprof_html/index.php?run=" . $run_id . "&source=test');</script>"; 53 ?>