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

来源:互联网 发布:冰点文库下载器mac版 编辑:程序博客网 时间:2024/05/18 00:33

就是LAMP,我们可以在php里去监测一下是哪一个php文件执行速度慢,然后把这个文件拿出来看,这样就能看到是哪一个语句慢,然后针对那一条sql语句去进行优化,跟开发的人一说他就会明白!

lnmp架构中,php-fpm.conf里面可以设置慢执行日志

lamp就不行了,需要借助第三方工具了



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% 峰值百分比 







0 0
原创粉丝点击