使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择
在上一篇文章中,我们使用了Perfview的分组功能。分组功能旨在对某些函数按照某个格式进行分组,以减少视图中的各种无关函数的数量。但仅有分组还不够,有时我们想将一些函数调用信息按某些条件过滤掉,例如将采用小于1%的函数调用信息去掉,或者将函数名中包含某个字眼的函数信息去掉,甚至只显示某个时间段调用的函数。这就需要用到PerfView提供的过滤(Filtering)功能了。PerfVIew提供了3种过滤功能:折叠(Folding),匹配过滤,和时间范围选择(Set Time Range)
折叠(Folding)
PerfView在界面上提供了两种Folding功能:“Fold%” 和 “FoldPats”.
“Fold%”意思是,将采样少于该百分比的函数调用信息条目“折叠”掉,并将其采样时间累加到这些函数的调用者。这里“折叠”的意思其实应该说是隐藏掉。
“FoldPats”:与“Fold%”类似,会将符合条件的函数调用记录“折叠”(或“隐藏”)掉,而它的采样时间将会算在它的直接调用者头上。而与“Fold%”不同的是它的条件不是“Inc%”的值,而是函数名称中符合给定的匹配模式。同时,这个功能也支持指定多个模式,不同模式之间用";"(分号)隔开。
过滤(Filtering)
折叠功能能实现过滤的效果,只是被过滤的项的采样时间会被累加到调用者身上。有时我们其实只想简单地去掉一些我们不关心的函数,同时也不需要保留它们的采样时间。这时,我们可以采用“简单粗暴”的过滤方式。
"IncPats":可以设置一个或多个模式(多个时用分号";"隔开),只有当函数名称匹配一个或者多个给定的模式时,这个函数会被显示在列表上,不匹配的会被从列表上删除。
"ExcPats":可以设置一个或多个模式(多个时用分号";"隔开),只有当函数名称匹配一个或者多个给定的模式时,这个函数会从列表上删除。
因此,"IncPats"和"ExcPats"是一对反义词,前者是“匹配则保留”,后者是“匹配则删除”
这里说的模式,和上一篇文章中说的“通配符”是一样的,或者可以参考帮助文件,或者在界面上对于的ToolTip提示中也有说明。
例如,以下图例的设置中,在”IncPats“框中设置”Process% ConsoleApp7 (4108)“,起到只显示我的程序”ConsoleApp7“的函数调用堆栈
时间范围选择
有时我们希望能只显示某一段时间内的函数调用情况,Perfview也提供时间范围选择的功能,在界面上提供了"Start"和"End"两个输入框。但要注意的是,这里的时间范围不是以绝对的时间值(比如:2018/12/27 23:15:02),而是从开始收集时经历的毫秒数。假设你某个时间开始收集,5秒后停止,你想只看第3秒到第4秒的数据,就可以在Start中设置"3000",在End中设置"4000",Perfview只显示大于或等于3000毫秒小于或等于4000毫秒的函数调用数据。
不仅只提供文本框输入值的功能,Perfview还提供一个更便利的时间范围选择功能,如下图:
在”When“一列中,显示了一串文本值,一共32个,由数字字母和一些符号组成。这串由符号组成的”字符串“代表了该函数在收集过程中被采样数(可以理解成出现的频繁度),具体来说,Pferview将每一个函数的”Inclusive“时间分成32"段",每一段的不同符号代表了该函数的”Inclusive“时间的比例值:(以下内容是从帮助文档中COPY的,稍作翻译)
”_“ 代表在该段"时间段"内没有采样(means no samples occurred in that bucket. )
”.“代表在该段"时间段"内有0%到0.1%的Inclusive时间 (means that interval consumed between 0% and .1%. )
”o” 代表在该段"时间段"内有1% 到 1%的Inclusive时间(means that interval consumed between .1% and 1%. )
”0” 代表在该段"时间段"内有1% 到10%的Inclusive时间(means that interval consumed between 1% and 10%. )
”1” 代表在该段"时间段"内有10% 到 20%的Inclusive时间(means that interval consumed between 10% and 20% )
...
”9 代表在该段"时间段"内有90% 到100%的Inclusive时间(means that interval consumed between 90% and 100% )
”A” 代表在该段"时间段"内有100% 到110%的Inclusive时间(means that interval consumed between 100% and 110% )
...
”Z” 代表在该段"时间段"内有350% 到360%的Inclusive时间(means that interval consumed between 350% and 360% )
”*” 代表在该段"时间段"内有超过360%的Inclusive时间(means that interval consumed over 360%)
”a” 代表在该段"时间段"内有0% 到-10%的Inclusive时间(means that interval consumed between 0% and -10% )
”b” 代表在该段"时间段"内有-10% 到-20%的Inclusive时间(means that interval consumed between -10% and -20% )
...
”z” 代表在该段"时间段"内有-250% 到-260%的Inclusive时间(means that interval consumed between -250% and -260% )
”*” 代表在该段"时间段"内有超过 -260 %的Inclusive时间(means that interval consumed over -260 %) 这个我不是很清楚,不是代表360%吗??
另外,为什么会有些值是超过100%呢? 按文档的解释,应该是有多个可消耗的资源单元,例如200%代表某个函数在2个CPU上都有100%的INCLUSIVE时间,但我不确定是否理解正确。
那怎么在“When”栏中进行时间范围选择呢?
可以双击“When”栏的文本值,然后用鼠标光标选择一段或整段文本(就像平时选择一段文字进行ctrl+c ctrl+v一样),然后右击并在右键菜单中选择“Set Time Range”,如图:
这样,该时间范围的值就会被设置到"Start"和“End”中,并进行过滤。
以上便是Perfiveiw中的几种数据过滤功能,还是那句话,这里涉及只介绍了基本的功能,更多更具体的功能说明,可以查看帮助文档。
系列目录
使用PerfView监测.NET程序性能(一):Event Trace for Windows
使用PerfView监测.NET程序性能(二):Perfview的使用
使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择
使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择的更多相关文章
- 使用PerfView监测.NET程序性能(三):分组
在上一篇博客中,我们通过Perfview帮助文件中自带的代码来简单使用了Perfview,了解了基本操作.现在来看看Perfview中的分组操作(Grouping).分组功能都旨将记录到的各种函数调用 ...
- 使用PerfView监测.NET程序性能(二):Perfview的使用
在上一篇博客中,我们了解了对Windows及应用程序进行性能分析的基础:Event Trace for Windows (ETW).现在来看看基于ETW的性能分析工具——Perfview.exe Pe ...
- 使用PerfView监测.NET程序性能(一):Event Trace for Windows
前言: 在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大.无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CP ...
- JVM-Java程序性能监控-初级篇
前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...
- 绝对好文:.NET程序性能的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- .NET程序性能的基本要领
前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...
- .NET程序性能优化基本要领
想了解更多关于新的编译器的信息,可以访问 .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...
- .NET程序性能优化的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- java程序性能优化
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...
随机推荐
- MySQL学习笔记-MySQL数据库优化实践[转]
最近一段时间,我们整理了一些关于Percona,Linux,Flashcache,硬件设备的优化经验,分享给大家: 硬件 1.开启BBWC RAID卡都有写cache(Battery Backed W ...
- Tomcat+Redis+Nginx实现session共享(Windows版)
redis安装:xx nginx安装:xx 步骤: 1.下载tomcat-redis-session-manager相应的jar包,主要有三个: wget https://github.com/dow ...
- 【UI测试】--合理性
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
- Bootstrap的起步
-- Bootstrap的起步部分是对Bootstrap的基本了解,有些细节只是在后面的完善时候需要详细阅读. 最基本点还是Css 和组件部分,这部分应该先进行练习....高级阶段是Javascrip ...
- Servlet 知识点 中文乱码的本质与解决
本质原因:在servlet中出现中文乱码的原因编码和解码采用的不是一个编码表或者两个编码表不是兼容 例如UTF-8编码.GBK编码都可以读取中文,那么如果采用UTF-8编码保存文件,但是采用GBK编码 ...
- Linux运维之Ansible自动化运维管理工具
Ansible简介:Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用.安装软件.执行命令.配置和编排任务.后面会提到批量安装 ...
- oracle创建表空间、添加数据库文件
创建表空间: create [undo|TEMPORARY]tablespace venn datafile '/opt/oracle/db01/app/oracle/oradata/OSSORCL/ ...
- C#并发集合(转)
出处:https://www.cnblogs.com/Leo_wl/p/6262749.html?utm_source=itdadao&utm_medium=referral 并发集合 1 为 ...
- 端口报错listen eaddrinuse:::xxx
端口报错 listen eaddrinuse:::xxx 表示这个端口被占用 结束正在使用此端的程序即可.