webgrind安装使用详细说明

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那么每个被执行的脚本都会被分析。如果开启这项会影响性能较大)
.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后多了个冒号:,如果多了冒号会造成不会触发)
.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)

翻译结束========================================================================================

配置xdebug 

                                                                  
如果是通过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:/wamp64/tmp"
其中第1项是开启远程调试,这里先不讲,2,3项前面的译文已经解释。第4项是分析出的信息文件命名格式,%t代表时间,%p代表pid。
xdebug相关设置可以通过phpinfo() 开快查看。


使用webgrind:

                                                                       

设置好后就可以重启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 - 综合耗时。包括自身耗时和调用所有的其他函数的耗时
 

细节分析                                                                   

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

测试代码:

<?php
//仅使用内置函数
function t1(){
	time();
}
//自定义函数外再执行一次
 time();
 sleep(1);
t1();
//t2调用自定义函数
function t2(){
   t1();
}
t2();
//增加内置函数耗时
function t3(){
      sleep(1);
}
t3();
//t4增加调用自定义函数t3一次。
function t4(){
   t3();
   sleep(1);
}
t4();
//t5增加非调用函数式内耗 for循环10万次,并调用t4
function t5()
{ $u=0;
  for($i=0;$i<100000;$i++)
  {  $u+=$i;   }
  t4();
}
t5();
?>

得出:

 

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

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

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

  1. Calls - 此函数中调用并执行的所有函数/方法名 所在文件行数。右边的横线小图标点击可以跳到源文件行(默认无权,需要按提示配置config.php,也就是把里面exposeServerFile 中的return false 改为return $file。只敢在开发环境中开启哦
  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

查看可视化调用图(点击show call graph)

这里需要提前安装python和graphviz,并

python和graphviz在win下的安装没什么好说的,

win下进两个官网下安装包,

https://www.python.org/downloads/windows/

https://graphviz.org/download/

一路下一步(记得选中将环境变量加入系统path,不然得自己配),

然后在webgrind文件夹config.php 40行左右配置python.exe和dot.exe两个路径。

webgrind程序本身win下并不支持绘制调用图,不过好在它是开源软件,github的issue讨论里,StevenMapes 实现了windows下的绘图:

#config.php 第40行附近: 
/**
     * Path to python executable
     */
    static $pythonExecutable = 'D:\Miniconda3\python.exe';

    /**
     * Path to graphviz dot executable
     */
    static $dotExecutable = 'C:\Program Files\Graphviz 2.44.1\bin\dot.exe';

    /**
     * Path to the webgrind installation 这是新加的变量
     */
    static $webgrindPath = 'd:\\wamp64\\www\\webgrind\\';
#index.php 160行附近改为 
shell_exec(Webgrind_Config::$pythonExecutable.' '.Webgrind_Config::$webgrindPath.'library/gprof2dot.py -n '.$showFraction.' -f callgrind '.Webgrind_Config::xdebugOutputDir().''.$dataFile.' | '.Webgrind_Config::$dotExecutable.' -T svg -o ' . $filename);

win10下需要在管理员权限下运行

dot -c(进行配置生成)

后,才能使用。否则会报错:Format: "svg" not recognized. Use one of:。

最后效果如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值