使用PerfView监测.NET程序性能(一):Event Trace for Windows

前言:

在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大。无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CPU。

微软为我们提供了很多性能诊断工具来达到此目的。例如在Visual Studio 2017中的性能查探器,Windows SDK中的Windows Performance Recorder (WPR) 和Windows Performance Analyzer (WPA),XPerf,当然,还有这篇博客介绍的PerfView。

但在介绍PerfView的使用前,有一个在Windows系统及应用程序性能这个主题上扮演重要角色的技术必须被提及,这就是Event Trace for Windows (ETW)。事实上,上边提及到的性能分析工具都是基于ETW来实现的。

什么是ETW

在微软上的解释中,ETW是自Windows 2000 推出的"内核级"的事件日志实现。通过记录系统及应用程序中各类事件日志,可以监测和分析系统及程序的运行细节,例如CPU使用率,.NET程序的GC状况等。ETW的日志里,包含着非常多的有用信息,例如进程/线程信息,上下文切换,各种I/O信息,程序执行时的时间节点,甚至是函数调用等信息。通过对日志数据进行实时采集,或者分析事件日志记录文件(.etl文件),就能轻易地检测和分析系统和程序的运行状况和性能瓶颈,而更为难得的是,ETW的性能还非常的高,据说可以达到 每秒写入20W条记录,而仅占用5%的CPU。

Windows除了在系统内核及系统组件自带了大量事件日志,ETW还为开发者提供编程接口(在 System.Diagnostics.Eventing 命名空间下),允许开发人员在项目中实现自己的事件跟踪,或者像使用log4net一样,将系统自定义的日志记录到ETW里面。这点不在这里展开了,有兴趣的可以参考Artech的文章:如何利用ETW(Event Tracing for Windows)记录日志

但话说回来,我曾经也尝试过在项目了使用ETW,但感觉在一般项目开发中,还是使用Log4net和nlog这些日志框架较为合适,毕竟一般来说业务系统的日志是给人看的,而ETW的日志数据是二进制形式保存的,更偏向于给日志消费者用的,肉眼在看起来并不那么方便,而且log4net/nlog更合适系统的业务场景的日志使用。ETW还是作为系统性能分析手段比较适合。关于这个可以参考这里

 

ETW VS 性能监视器

 或者有人会问,Windows里已经提供了强大的性能监视器(Perfmon.exe),和资源监视器(顺便说下,资源监视器也是基于ETW实现的。参考这里),为什么还需要ETW和其他基于它的工具?例如使用性能监视器,添加各种性能计数器,也可以将系统在运行时的方方面面的性能数据呈现出来,那ETW及PerfView还有什么存在意义?

一个非常明显的理由就是,ETW的日志存储着非常详细的程序运行数据。利用PerfView等工具,你可以看到具体一个进程加载信息,线程的执行信息,函数的调用树,和执行时间,执行堆栈,CPU执行时间等等信息,而性能监视器只能提供各个性能指标的数据,但并不能具体地展示哪个程序引起了具体的性能问题。通常我们可以配合性能监视器和ETW相关工具的使用,可以全方位的了解系统的性能状况,并且可以直观地看到具体是那些函数导致了性能问题,达到知其然同时知其所以然的效果。

第二个理由便是,ETW日志的速度比性能监视器要快,可以在生产环境中自由地获取运行数据而不影响服务器运行。但性能监视器也是即开即用,所以我觉得这点对我来说意义不太大。

 640?wx_fmt=png640?wx_fmt=jpeg

.ETL文件

.etl文件是ETW的日志文件扩。当使用PerfView等工具捕获系统日志后,便会生成此类文件。使用PerfView等ETW的分析工具,可以对文件内的日志进行各种统计与分析操作。而如果只想单纯地看日志内容,可以使用Microsoft Message Analyzer打开文件。

640?wx_fmt=png

 

参考资料:

 ETW (Event Tracing For Windows) – what it is and useful tools

ETW Introduction and Overview

Inside Event Tracing for Windows

Logging ETW events in C#: System.Diagnostics.Tracing.EventSource

Application Analysis with Event Tracing for Windows (ETW)

如何利用ETW(Event Tracing for Windows)记录日志

原文地址: https://www.cnblogs.com/lwhkdash/p/9949566.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚树 virtual-tree

我们发现,如果一棵树中真正需要处理的点很少,而总共点数很多时,可以只处理那些需要的点,而忽略其他点。 因此我们可以根据那些需要的点构建虚树,只保留关键点。 oi-wiki上对虚树的介绍 我们根据一下方式建立虚树&#…

8.16模拟:树上算法

文章目录前言收获全排列求期望模型转化树哈希判断同构&无根同构转有根同构比赛复盘T1 reformT2 buildT3 relationT4 split总结前言 150分 10020300 qwq 今天题还是较难 而且又去打了半个多小时的疫苗 情有可原吧 T2其实是可切的 T3的暴力因为数组开小了挂了30qwq 感觉这几…

【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)

我似乎很少写这种算法博客可持久化线段树概念概念介绍(类比帮助理解)简单分析一下时间和空间复杂度(内容池)模板结构体变量建树模板单点修改模板单点查询模板区间修改模板(pushup)区间修改模板(…

bzoj#4161-Shlw loves matrixI【常系数线性齐次递推】

正题 题目链接:https://darkbzoj.tk/problem/4161 题目大意 给出序列aaa,和hhh的0∼k−10\sim k-10∼k−1项,满足 hn∑i1naihn−ih_n\sum_{i1}^na_ih_{n-i}hn​i1∑n​ai​hn−i​ 求hnh_nhn​。 1≤n≤109,1≤k≤20001\leq n\leq 10^9,1\leq k\leq 20…

P3258 [JLOI2014]松鼠的新家

文章目录题意:题解:树上差分代码:树链剖分代码:P3258 [JLOI2014]松鼠的新家题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访&#xf…

8.17模拟:数学

文章目录前言收获考场复盘T1T2T3T4总结前言 190分 60100300 虽然分不太高,但毕竟今天的题有点太阴间了… 所以还不错啦 最重要的是今天挂分很少 终于停住了这几天越挂越嗨的态势 也就T4挂了5分吧,可以接受 收获 算斜率的区间确定一条线旋转位置时要取…

牛客-小w的魔术扑克【并查集】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/C 题目大意 nnn个数字mmm张扑克牌,每张两面有各有一个数字,可以选择一些扑克牌使用正面的数字,一些使用反面的,qqq次询问能否凑出l∼rl\sim rl∼r。 1≤n,m,q≤1051\leq…

[SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

DP专练博客 DP专练T1:最大子矩阵题目题解代码实现T2:守卫题目题解代码实现T3:手机号码题目题解代码实现T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。…

【做题记录】位运算

CF1592E Bored Bakry 题意:找出最长的区间 \([l,r]\) 满足 \(a_{l}\&a_{l1}\&\dots\&a_{r-1}\&a_{r}>a_{l}\oplus a_{l1}\oplus\dots\oplus a_{r-1}\oplus a_{r}\) 。 首先发现如果有一段满足这个条件的区间,那么一定有一个(较高的)二…

IdentityServer4-EF动态配置Client和对Claims授权(二)

本节介绍Client的ClientCredentials客户端模式,先看下画的草图:一、在Server上添加动态新增Client的API 接口。为了方便测试,在Server服务端中先添加swagger,添加流程可参考:https://www.cnblogs.com/suxinlcq/p/67575…

P3178 [HAOI2015]树上操作

P3178 [HAOI2015]树上操作 题意&#xff1a; 题解&#xff1a; 这已经是很裸的树链剖分了。。。 直接套模板 代码&#xff1a; #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespac…

8.18模拟:构造

文章目录前言收获考场复盘T1T2T3T4总结前言 190分 10006030 明明是dfs专题 不太理想qwq 写了三个dfs就离谱 最不满意的是T2的爆零 其实分类讨论一下是很可做的 而且暴力还因为没开ll挂掉了… 不过毕竟构造题之前几乎没有做过 所以慢慢来吧 收获 一些构造题的trick 调整法数…

P5371-[SNOI2019]纸牌【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P5371 题目大意 有nnn种牌&#xff0c;每种牌最多CCC张&#xff0c;XXX个限制形如kik_iki​种牌至少aia_iai​张。 求所有牌的序号能分成(i,i,i)(i,i,i)(i,i,i)或者(i,i1,i2)(i,i1,i2)(i,i1,i2)的若干组的方案数。 1≤n≤10…

dotnet core开源博客系统XBlog介绍

XBlog是dotnet core平台下的个人博客开源系统&#xff0c;它只需要通过Copy的方式即可以部署到Linux和windows系统中&#xff1b;如果你有安全证书那只需要简单配置一下即可提供安全的Https服务。接下来主要介绍XBlog功能、部署和基础设置。技术要点基于dotnet core平台&#x…

【做题记录】max-min+1=len 区间计数

(来源&#xff1a;XJ高质量原创题) 原题地址 弱化版&#xff1a;CF526F Pudding Monsters 弱化版 题意&#xff1a;\(n\times n\) 的棋盘上有 \(n\) 颗棋子&#xff0c;每行每列都有且仅有一颗棋子&#xff0c;求出有多少个 \(k\times k\) 的子棋盘也满足每行每列只有一颗棋子。…

【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

文章目录问题引入介绍莫队算法及其实现过程时间复杂度莫队算法适用范围莫队奇偶优化普通莫队&#xff1a;小B的询问树上莫队&#xff1a;SP10707 COT2 - Count on a tree II回滚莫队&#xff1a;[PA2011]Kangaroosupd&#xff1a;2021-08-11&#xff1a;重新对博客进行了外观美…

P2146 [NOI2015] 软件包管理器

P2146 [NOI2015] 软件包管理器 题意&#xff1a; 如果软件包 a 依赖软件包 b&#xff0c;那么安装软件包 a 以前&#xff0c;必须先安装软件包 b。同时&#xff0c;如果想要卸载软件包 b&#xff0c;则必须卸载软件包 a。 软件包之间存在依赖关系&#xff0c;除了0号软件包以…

微软 2018 开源大事记

从微软公开宣布 "Microsoft love linux" 那一刻起&#xff0c;过去的几年里&#xff0c;微软积极拥抱开源的举动我们有目共睹&#xff0c;即便有过"Linux is a cancer"这种真香警告的 flag&#xff0c;但不得不承认的是&#xff0c;微软一系列“拥抱开源”…

模板:二叉搜索树平衡树

文章目录前言二叉搜索树代码treap代码splay开点旋转splay插入查找第k大元素查找给定元素的排名前驱&后继删除完整代码练习总结前言 终于开始学这个东西了 看了好几篇博客才找到一篇可读的qwq 我曾经还以为线段树码量大…我真傻&#xff0c;真的 所谓平衡树&#xff0c;就是…

51nod2626-未来常数【树上启发式合并,线段树】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId2626 题目大意 给出nnn个点的一棵树&#xff0c;每个区间[l,r][l,r][l,r]的代价是选出这个区间中的一个点xxx使得它走到所有点然后又回到xxx的路程最短长度&#xff0c;求一个随机区间的期望代价。 1≤n…