您的位置:首页 > 其它

webgrind安装使用详细说明

2015-02-28 09:40 218 查看
原文转自:http://blog.csdn.net/yukon12345/article/details/11408617

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

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

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

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

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

特点:

跨平台,简便
可以记录函数自身耗时self cost或者综合耗时inclusive cost(指的是函数自身耗时+调用其他函数耗时)
可以查看php函数耗时以及用户自定义函数耗时
可以查看任何函数在哪里以及被哪个调用
通过gprof2dot.py 生成了种调用图表 :https://github-camo.global.ssl.fastly.net/a264619233ac41fb21c34ff6bf728d3d0daab20c/687474703a2f2f77696b692e6a72666f6e736563612e676f6f676c65636f64652e636f6d2f6769742f6770726f6632646f745f736d616c6c2e706e67

相关的讨论建议版:webgrind
google group.

安装:

1.解压,放入网站文件夹,然后进入相关路径即可。比如http://localhost/webgrind.

2.xdebug是后台程序,所以首先要安装xdebug http://www.xdebug.org/docs/install

3在php.ini中做好设置:

只需要修改配置文件php.ini来启用该库,打开php.ini文件,并查找修改以下配置信息:

zend_extension = "c:\xampp\php\ext\php_xdebug.dll"

配置php_xdebug.dll的地址,去掉前面的;号

xdebug.default_enable = On

去掉;号,启用该功能

xdebug.profiler_append = 0

分析结果文件是否重写配置项,0为不重写,新的分析结果会追加到上一次结果分析之后 1为重写,生成新的结果文件,去掉;号

xdebug.profiler_enable = 0

性能分析配置项,如果值为1,该功能自动生成结果分析文件,去掉;号

xdebug.profiler_enable_trigger = 1

需要触发的性能分析配置项,值设为1,需要在访问地址后面加XDEBUG_PROFILE才会生成结果文件

xdebug.profiler_output_dir = "tmp/xdebug"

结果文件生成路径,默认是tmp文件夹,如果修改了配置,xdebug文件夹需要我们手动建立

配置信息修改完成,保存php.ini,然后重启apache服务。

配置

如果是通过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 - 综合耗时。包括自身耗时和调用所有的其他函数的耗时

细节分析

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

测试代码:

[php] view
plaincopyprint?

<?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();

?>

得出:



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

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

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

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

原文转自:http://blog.csdn.net/yukon12345/article/details/11408617
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: