webgrind是一个网页版的性能分析工具,它的主要作用就是分析xdebug生成的cachegrind文件,以一种界面友好详尽的方式来展示性能数据。试用了一下感觉还是很不错的,鉴于网上并没有一个系统介绍,特写一篇文章:

webgrind官方定义翻译版:https://github.com/jokkedk/webgrind

==================================================================================

是性能分析工具xdebug的PHP web版。它实现了 kcachegrind  的部分功能,但安装简便,适用所有平台,性能优化。

另外它是 Google Summer of Code(Google编程之夏)2008的建议计划之一。

特点:

相关的讨论建议版:webgrind google group.
安装:
1.解压,放入网站文件夹,然后进入相关路径即可。比如http://localhost/webgrind.
2.xdebug是后台程序,所以首先要安装xdebug http://www.xdebug.org/docs/install
3在php.ini中做好设置:

xdebug.profiler_enable = 1
一直使用xdebug来分析脚本。0/1,--(yukon12345:如果设置为1那么每个被执行的脚本都会被分析。如果开启这项会影响性能较大)
xdebug.profiler_enable_trigger = 1
是否开启触发 。0/1,--是否启用添加url参数的形式来触发分析。比如. http://localhost/samplepage.php?XDEBUG_PROFILE(yukon12345:官网上XDEBUG_PROFILE后多了个冒号:,如果多了冒号会造成不会触发)

可以查看xdebug手册来获取更多信息: http://www.xdebug.org/docs/all_settings

配置:
通过webgrind文件夹下的config.php可以做相关配置,但是需要与被默认安装并且配置正确的xdebug协同使用。

  • $storageDir - 一个可以写入的文件夹路径。(yukon12345:存储分析后生成的 cachegrind文件,为空就是用系统tmp文件夹或者xdebug的tmp文件夹。)
  • $profilerDir -如果没装xdebug,webgrind就会到此路径下分析里面的cachegrind文件。如果安装了xdebug那么会查找它的xdebug.profiler_output_dir。(默认是/tmp)

翻译结束========================================================================================
配置                                                                          
如果是通过wamp自带安装的那么在php.ini中会有这些简单的设置选项,如果是手工安装那么安装好xdebug后只要在php.ini里增加下面的2,3项即可。
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "d:/wamp/tmp"
其中第1项是开启远程调试,这里先不讲,2,3项前面的译文已经解释。第4项是分析出的信息文件命名格式,%t代表时间,%p代表pid。
xdebug相关设置可以通过phpinfo() 开快查看。
使用:                                                                       
设置好后就可以重启wamp来看看效果:
我们使用XDEBUG_PROFILE作为url的一个参数写在某个页面上后,转入页面,然后到xdebug.profiler_output_dir所定的路径下,就会发现生成了一个cachegrind.out.开头的文件,这就是webgrind需要分析的文件
进入webgrind主页面:页面很简单,右上角有一排下拉列表

第一项参数参数其实我也纠结了一下,怎么才容易想清楚和说明白:

webgrind把所有被调用函数/方法首先做一个排序,由高到低显示。然后取出前N个,使他们耗时比率之和在90-100%之间。

要注意的是,最好不要选择100%,这样将会显示所有被调用的函数/方法,如果是一个代码复杂的页面,那么webgrind偶尔会被卡死。并且通常我们只要关注耗时前几名的函数即可。

第二个就是选择profile文件。默认是分析最新一次的xdebug记录。如果之前设置好路径和记录机制那么我们就会发现下拉列表里有很多选项。

第三个选项是显示百分比/毫秒/微秒。

下面的彩色进度条一样的东东是耗时量比较条。蓝代表php内置函数,灰色(这里占用很小看不出)代表requir/onclude,绿代表类方法,橙黄代表类其他过程函数 (用户自定义函数)

结果查看

然后下面的分析列表的样子:(选了毫秒作为显示单位)

对于其中一些参数,我在结合我的官网翻译以及stackoverflow看到的解释是这样的:

Invocation Count
被调用执行的次数

Total Self Cost - 函数自身开销耗时  毫秒/ 微秒 /百分比(并不包含调用其他函数)
Total Inclusive Cost - 综合耗时。包括自身耗时和调用所有的其他函数的耗时

细节分析

我经过试验,才明确了解了几个数据的区别:

测试代码:

  1. <?php
  2. //仅使用内置函数
  3. function t1(){
  4. time();
  5. }
  6. //自定义函数外再执行一次
  7. time();
  8. sleep(1);
  9. t1();
  10. //t2调用自定义函数
  11. function t2(){
  12. t1();
  13. }
  14. t2();
  15. //增加内置函数耗时
  16. function t3(){
  17. sleep(1);
  18. }
  19. t3();
  20. //t4增加调用自定义函数t3一次。
  21. function t4(){
  22. t3();
  23. sleep(1);
  24. }
  25. t4();
  26. //t5增加非调用函数式内耗 for循环10万次,并调用t4
  27. function t5()
  28. { $u=0;
  29. for($i=0;$i<100000;$i++)
  30. {  $u+=$i;   }
  31. t4();
  32. }
  33. t5();
  34. ?>

得出:

因此我们可以得出最终结论:

  1. invocation count 表示的是整个php页面从载入到执行完毕呈现,各种函数被调用的总次数(如sleep不管被哪个函数调用,总共页面期执行了6次,t3被t4直接调用、t5间接调用一次,自身执行一次)
  2. total self cost 表示的是函数自身消耗(就如t5中10万次循环消耗了31毫秒,sleep执行了2000毫秒,但自身消耗并不把其他任何函数调用算在其中)
  3. total inclusive cost 表示的是此函数从开始到执行完毕所用消耗 ,包括自身消耗和调用其他函数消耗

点击一个父函数名后出现展开:

  1. Calls - 此函数中调用并执行的所有函数/方法名 次数 及耗时
  2. Total Call Cost - 被此父函数调用时,执行的总耗时 (the total time executing this function, when called from the parent function)
  3. Count - 被此父函数调用时,执行的次数。number of times the parent calls the child

webgrind安装使用详细说明的更多相关文章

  1. vs2010如何安装mvc3,怎样安装,详细的步骤,从哪下载?请看这篇文章。

    vs2010如何安装mvc3,怎样安装,详细的步骤,从哪下载?请看这篇文章. 安装步骤:vs2010 -> vs2010sp1 -> AspNetMVC3Setup -> AspNe ...

  2. win8.1系统的安装方法详细图解教程

    win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...

  3. RHEL 6.3安装(超级详细图解教程)[转载]

        附:RHEL6.3下载地址 32位:http://rhel.ieesee.net/uingei/rhel-server-6.3-i386-dvd.iso 64位:http://rhel.iee ...

  4. 安装WordPress详细教程指南

    最近准备自己建一个个人博客,以便分享一些自己工作生活中的一些观点及经验,建博客当然选wordpress,毕竟wordpress是为博客而生的嘛.下边记录一下自己安装WordPress的详细过程指南,亦 ...

  5. 【Oracle RAC】Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂)

    [Oracle RAC]Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂) 2 Oracle11gR2 RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件 ...

  6. 【Oracle RAC】Linux系统Oracle12c RAC安装配置详细记录过程V2.0(图文并茂)

    [Oracle RAC]Linux系统Oracle12c RAC安装配置详细过程V2.0(图文并茂) 2 Oracle12c RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件下载3 ...

  7. Ubuntu下安装JDK详细教程

    Ubuntu下安装JDK详细教程 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ Ubuntu版本:Ubuntu-12.04.5-desktop-i386 ...

  8. Git学习系列之Windows上安装Git详细步骤(图文详解)

    前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...

  9. mysql编译安装(详细)(转载)

    mysql编译安装(详细)   一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从 ...

随机推荐

  1. 虚拟机virtualBox

    在笔记本了装了一个虚拟机, 并安装了Linux系统, 方便测试linux 命令. 考虑到不需要图形界面, 学习了用命令行操作虚拟机, 配置如下 linux 下安装openssh-server 虚拟机设 ...

  2. Julia1.x安装

    删除julia-1.0 $ jupyter kernelspec list Available kernels: julia-1.0 /Users/keke.zhaokk/Library/Jupyte ...

  3. NGINX常用模块(二)

    5.Nginx日志配置 Nginx有非常灵活的日志记录模式.每个级别的配置可以有各自独立的访问日志.日志格式 通过log_format命令定义格式 1.log_format指令 # 配置语法:包括:e ...

  4. Python模块——base64

    简介 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节表示,写出数值就是0-63.故三个字 ...

  5. python-day6爬虫基础之会话、Cookies、代理

    由于前几天看电脑时间过长,在昨天的时候,两个眼睛就有点疼痛感觉,所以昨天晚上就没有学习,博客也没有跟着写,今早去校医院买了点药,上午把老师要求的电路板画完了,已经发出去做了,现在闲来无事,看了一会关于 ...

  6. 基于Flask框架搭建视频网站的学习日志(六)之数据库

    使用Flask-SQLSlchemy管理数据库(1)--初步安装调试 一.介绍: Flask-SQLSlchemy是一个Flask扩展,简化了Flask中对sql的操作,是一个高层的框架,可以避免直接 ...

  7. Servlet&JSP复习笔记 02

    1.Servlet获取请求参数 获取请求参数依靠的是表单元素的name属性,广泛意义来说id属性是给客户端使用的,name属性是服务器使用的. a.获取Name-Value的方法: - getPara ...

  8. shell day01总结

    ,Iptables –Z 清空再计数 内存是如何工作的?是干什么的? 随机存取存储器又称作“随机存储器”,是与CPU直接交换的内部存储器,也叫主存.它可以随时读写,而且速度很快,通常作为操作系统或其他 ...

  9. 给创业公司CEO的临别赠言

    一别两宽,各生欢喜 2018年2月8日,我在这个公司的最后一天,三年半. 还记得2014年,在三里屯SOHO的某个咖啡厅中,你自信飞扬的脸和眼睛里暗夜星辰般的闪亮的希冀让我久久无法平静.终于在某一个耀 ...

  10. JacksonConfig

    package org.linlinjava.litemall.core.config; import com.fasterxml.jackson.annotation.JsonInclude; im ...