SSH安装xhprof+graphviz

2011年4月11日 | 分类: Linux | 标签: , , , , , , , , ,

XHProf是一个分层PHP性能分析工具。GraphViz 是AT&T 贡献的跨平台图形生成工具!刚开始学,先马克一下安装过程。

wget http://www.yishanhome.com/wp-content/uploads/2011/04/xhprof.sh;sh xhprof.sh

最终效果:http://你的网址/xhprof.php
提示如下:Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have ‘dot’ image generation utility installed.且编译graphviz提示信息png: No (missing png.h),也就是dot 不支持PNG,执行这个

wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz
tar zxf libpng-1.5.1.tar.gz
cd libpng-1.5.1
./configure
make
make install

XHProf介绍:
XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销。原始数据收集部分是用纯C实现的,是一个名叫xhprof的 Zend扩展 。XHProf有一个简单的HTML的用户界面( PHP写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。

XHProf报告往往可以有助于理解被执行的代码的结构。的等级性质的报告可用来确定,例如,什么链要求导致了所谓的特殊功能得到。

XHProf可以比较两次运行的结果(又名“差异报告”)或是从多次运行得到的汇总数据。差异和汇总报告,就像单一运行报告一样,也提供“平板”以及“分层”的性能分析视图。

XHProf是一种轻量级的性能分析工具。在数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。

XHProf的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计。[见用于生产环境的补充说明。 ]

例如,XHProfLive (不属于开源的工具包),是Facebook使用的一个全系统的性能监测系统,建立在XHProf的基础之上 。 XHProfLive不断收集函数级别的Profiler资料,这些资料来自生产环境中运行中的示例页面[用xhprof来收集] 。然后XHProfLive汇总指定的时候,页面类型,来取得各个页面的性能数据,可以帮助解决各种问题,如:特定的某个网页的函数级的性能情况怎样?在所有网页中,或者对某一具体的网页,foo 函数的开销如何?在过去的一小时/天/周中,哪些函数返回的次数最多?某个页面/函数的执行时间的变化趋势如何?等等。

由Facebook最初开发的XHProf在2009年3月开放源代码
GraphViz 是AT&T 贡献的跨平台图形生成工具!
通过 The DOT Language 一种脚本语言来定义图元的关系进行自动绘制

官方:http://pecl.php.net/package/xhprof
http://www.graphviz.org

?Download xhprof.sh
#!/bin/bash
printf "
#This is a Shell-Based tool of Backup web sites directory
# Author: yishan
# Website: http://www.yishanhome.com
"
php_dir()
{
phpdir=/usr/local/php
 echo "Please input the PHP directory:"
  read -p "(Current directory: $phpdir):" phpdir
  if [ "$phpdir" = "" ]; then
    phpdir=/usr/local/php
  fi
  if [ ! -d $phpdir ] ; then
echo -e '\033[0;31;1mError PHP directory\033[0m'
  php_dir
  fi
  }
php_dir
www_dir()
{
wwwdir=/home/wwwroot
 echo "Please input the WWW site directory:"
  read -p "(Current directory: $wwwdir):" wwwdir
  if [ "$wwwdir" = "" ]; then
    wwwdir=/home/wwwroot
  fi
  if [ ! -d $wwwdir ] ; then
echo -e '\033[0;31;1mError WWW site directory\033[0m'
  www_dir
  fi
  }
www_dir
pini_dir()
{
pinidir=/usr/local/php/etc/php.ini
 echo "Please input the php.ini Location:"
  read -p "(Current directory: $pinidir):" pinidir
  if [ "$pinidir" = "" ]; then
    pinidir=/usr/local/php/etc/php.ini
  fi
  if [ ! -w $pinidir ] ; then
echo -e '\033[0;31;1mError php.ini Location\033[0m'
  pini_dir
  fi
  }
pini_dir
cd $HOME
yum -y install gcc
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib $wwwdir
cd extension
$phpdir/bin/phpize
./configure --with-php-config=$phpdir/bin/php-config
make
make install
echo "[xhprof]" >> $pinidir
echo "extension=xhprof.so" >> $pinidir
echo ";" >> $pinidir
echo "; directory used by default implementation of the iXHProfRuns" >> $pinidir
echo "; interface (namely, the XHProfRuns_Default class) for storing" >> $pinidir
echo "; XHProf runs." >> $pinidir
echo ";" >> $pinidir
echo "xhprof.output_dir=/var/log/xhprof/" >> $pinidir
mkdir -p /var/log/xhprof
chmod 777 /var/log/xhprof
cd $HOME
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.26.3.tar.gz
tar zxf graphviz-2.26.3.tar.gz
cd graphviz-2.26.3
./configure
make
make install
cat > $wwwdir/xhprof.php <<EOF
<?php
function a(){
 echo 'a';
}
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
a();
\$xhprof_data = xhprof_disable();
print_r(\$xhprof_data);
include_once "xhprof_lib/utils/xhprof_lib.php";  
include_once "xhprof_lib/utils/xhprof_runs.php";  
\$xhprof_runs = new XHProfRuns_Default();  
\$run_id = \$xhprof_runs->save_run(\$xhprof_data, "yishanhome");
echo "xhprof_html/index.php?run=\$run_id&source=yishanhome";
?>
EOF
$phpdir/sbin/php-fpm restart
service httpd restart
目前还没有任何评论.

返回顶部