使用xhprof + graphviz 性能追踪php站点

回复 收藏
xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。

Graphviz由一种被称为DOT语言的图形描述语言,可以根据提供的节点以及线生成图形。 xhprof 是可以使用graphviz生成图片的,这样分析的php程序运行过程更加直观。 如果你是centos系统,那么graphviz可以直接通过yum安装,否则就需要源码编译,源码编辑会非常困难,依赖的东西太多了。

1.  安装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   /data/web/   #/data/web/为你站点的根目录
cd extension/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
cp modules/xhprof.so  /usr/local/php/ext/    #这里假设你的php扩展模块目录在/usr/local/ext/下,这个目录,你可以根据这个命令查找:/usr/local/php/bin/php -i |grep '^extension_dir'

编辑php.ini
vim /usr/local/php/etc/php.ini    #加入如下配置:
[xhprof]
extension=xhprof.so
xhprof.output_dir=/data/web/xhprof_data   #其中/data/web/是你的网站根目录,xhprof_data目录需要自己手动创建,并赋予777权限

创建目录,更改权限  
mkdir /data/web/xhprof_data
chmod 777 !$

重启apache或者重启php-fpm

更改要分析的php程序,假如你要分析的php程序为 index.php ,则在index.php中加入如下内容:
在顶部加入:
  1. xhprof_enable();
  2. //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数
  3. //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);  同时分析CPU和Mem的开销
  4. $xhprof_on = true;
在底部加入:
  1. // stop profiler
  2. $xhprof_data = xhprof_disable();
  3. //
  4. // Saving the XHProf run
  5. // using the default implementation of iXHProfRuns.
  6. //
  7. include_once "./xhprof_lib/utils/xhprof_lib.php";
  8. include_once "./xhprof_lib/utils/xhprof_runs.php";
  9. $xhprof_runs = new XHProfRuns_Default();
  10. // Save the run under a namespace "xhprof_foo".
  11. //
  12. // **NOTE**:
  13. // By default save_run() will automatically generate a unique
  14. // run id for you. [You can override that behavior by passing
  15. // a run id (optional arg) to the save_run() method instead.]
  16. //
  17. $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
  18. echo "---------------\n".
  19. "Assuming you have set up the http based UI for \n".
  20. "XHProf at some address, you can view run at \n".
  21. "http://yourdomain/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n".
  22. "---------------\n";
2.  安装graphviz
yum install -y graphviz

3.  理解xhprof输出
主要的

Inclusive Time (或子树时间):包括子函数所有执行时间。
Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
Wall时间:花去了的时间或挂钟时间。
CPU时间:用户耗的时间+内核耗的时间

表单中的

Function Name 函数名
Calls 调用次数
Calls% 调用百分比
Incl. Wall Time (microsec) 调用的包括子函数所有花费时间 以微秒算(一百万分之一秒)
IWall% 调用的包括子函数所有花费时间的百分比
Excl. Wall Time (microsec) 函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒)
EWall% 函数执行本身花费的时间的百分比,不包括子树执行时间
Incl. CPU(microsecs) 调用的包括子函数所有花费的cpu时间。减Incl. Wall Time即为等待cpu的时间
减Excl. Wall Time即为等待cpu的时间
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算(一百万分之一秒)。
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包括子函数执行使用的内存。
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函数执行本身内存,以字节算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
2013-09-10 10:14 举报
已邀请:
0

eepan

赞同来自:

一天几个个金币,何时达到1000,苦等的弟兄们
0

eepan

赞同来自:

合理利用规则挣金币
0

eepan

赞同来自:

学海无涯,苦作舟,好帖子
0

eepan

赞同来自:

学习了,发帖发到手累,就为1000
0

eepan

赞同来自:

坚持回帖,金币学习两不误
0

eepan

赞同来自:

又来抢金币了;就为了超过1000.
0

eepan

赞同来自:

常来看看,常来学习。
0

eepan

赞同来自:

论坛还是有实际使用意义,能学东西
0

eepan

赞同来自:


一天增加几个金币
0

eepan

赞同来自:

收藏,鼎力支持。
0

eepan

赞同来自:

支持,向1000金币进军。
0

秋的思念

赞同来自:

这个分析php文件可否对调用函数进行分析哈???

还没用过,需要体验一下{:4_91:}
0

旅行

赞同来自:

坚持回帖,金币学习两不误

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: