如何看懂XDEBUG+WEBGRIND?(转)
看到一个很有用的东东,收藏。。
http://blog.csdn.net/yukon12345/article/details/11408617
~~~~~~~~~~
使用:
设置好后就可以重启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();
- ?>
得出:
因此我们可以得出最终结论:
- 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
如何看懂XDEBUG+WEBGRIND?(转)的更多相关文章
- [转]看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- 看懂Oracle执行计划
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...
- 一张图看懂ANSYS17.0 流体 新功能与改进
一张图看懂ANSYS17.0 流体 新功能与改进 提交 我的留言 加载中 已留言 一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...
- 怎样看懂Oracle的执行计划
怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...
- 看懂SqlServer查询计划【转】
原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...
- 看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- [转]看懂ExtJS的API
原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...
- 看懂UML类图与时序图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
- 亲子之间,在于看懂,无关耐心zz
每当有人告诉我:『你对孩子真有耐心!』时,我总会想起我的金项链,当越来越多人说的时候,我就越想找出来,我翻箱倒柜的找,越心急却越找不到,那 一条金项链从我十八岁那一年一直戴在我的脖子上一直到女儿两岁, ...
随机推荐
- Android中程序包的相关操作
//获取系统中已经安装的应用程序 List<PackageInfo> packageinfos=this.getPackageManager().getInstalledPackages( ...
- POJ2761---Feed the dogs (Treap求区间第k大)
题意 就是求区间第k大,区间 不互相包含. 尝试用treap解决一下 第k大的问题. #include <set> #include <map> #include <cm ...
- [LeetCode] 129. Sum Root to Leaf Numbers 解题思路
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- coreOS+Docker新一代企业轻量级Linux
CoreOS官网主页使用一句话概括其理 念:“A new way to think about servers”,以及紧接着的“CoreOS is Linux for massive server d ...
- Android笔记(一):从this关键字发散
this指的是直接包含它的类的实例. 例如: public class MyClass{ int num; public MyClass(int num){ this.num = num; } } 这 ...
- JS(一)
循环还是很有意思的: 1) 安全数的作业: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- bootstrap data
bootstrap data 用法 <div data-role="page" data-last-value="43" data-hidden=&quo ...
- volatile-java关键字
volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2 ...
- android媒体--stagefright概述【一】
近期杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改下名字 做了挺长时间的android平台的媒体开发,对之前的分析进行一个阶段性的总结. 一.android结构图(上 ...
- Linux下Weblogic域的创建过程
环境介绍:操作系统 :Redhat 5.5Weblogic :英文版 8.1.6 Weblogic安装目录 :/weblogic 一.域的建立执行下面语句进入weblogic的bin目录: cd /w ...