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、查看效果
测试代码
<?php
index();
function index(){
phpinfo();
b();
}
function b(){
echo "i love you";
}
//启动xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//停止xhprof
$xhprof_data = xhprof_disable();
//取得统计数据
print_r($xhprof_data);
$XHPROF_ROOT = realpath(dirname(__FILE__) . '/');
echo $XHPROF_ROOT;
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/callgraph_utils.php";
//保存统计数据,生成统计ID和source名称
$xhprof_runs = new XHProfRuns_Default();
print_r($xhprof_runs);
$run_id = $xhprof_runs->save_run($xhprof_data, "test"); //source名称是xhprof_foo
//弹出一个统计窗口,查看统计信息
echo "<script language='javascript'>window.open('../xhprof_html/index.php?run=" . $run_id . "&source=test');</script>";
?>