.NET必知的EventCounters性能指标监视器
在.NET我们对于性能指标监控,其实常见的有两个方法,一个是CLI工具dotnet-counters
而另一个是代码级别的EventListener
.
使用dotnet-counters
dotnet-counters
是一个性能指标监视工具,用于临时运行状态监视和初级性能调查。它可以观察通过 EventCounter API发布的性能计数器值。例如,可以快速监视 CPU 使用情况或 .NET Core 应用程序中引发的异常率,以了解在使用PerfView
或dotnet-trace
深入调查更严重的性能问题之前是否有任何可疑操作。
-- 摘自 dotnet-counters
命令
dotnet-counters collect
dotnet-counters list
dotnet-counters monitor
dotnet-counters ps
安装dotnet-counters CLI工具,可通过如下命令:
dotnet tool install --global dotnet-counters
更新命令如下所示:
dotnet tool update dotnet-counters --global
安装完工具之后,我们可以进行查看可监视的进程:
dotnet-counters ps12268 dotnet C:\Program Files\dotnet\dotnet.exe16324 dotnet C:\Program Files\dotnet\dotnet.exe
获取到进程ID后,我们可以通过如下命令进行监视:
dotnet-counters monitor -p 12268
监视特定的EventSources
,可以提供以一个空格分隔开的EventSources
列表,如下所示:
dotnet-counters monitor -p 12268 System.Runtime MyEventSource
在默认的情况下,我们对于EventSource
监视时,它捕获的是所有的计数器。如果我们想单独跟踪某几个计数器那么可通过如下方式进行指定:
dotnet-counters monitor -p 12268 System.Runtime[cpu-usage,gc-heap-size]
对于监视器我们可以设置刷新频率,可以通过--refresh-interval
参数来设置:
dotnet-counters monitor -p 12268 --refresh-interval 3 System.Runtime[cpu-usage,gc-heap-size]
代码中的EventCounters
EventListener
提供了进程内(In-Process)订阅和消费日志事件的方式,EventListener
可以接收到来自EventSource
分发的日志事件。这些事件内涵盖了GC、JIT、ThreadPool和interop的行为。
创建EventListener
在下面我们进行重写OnEventSourceCreated
方法,该方法会在调用时接收一个EventSource
对象,我们可以通过EventSource
对象的Name属性去筛选我们感兴趣的日志事件,筛选后我们需要显示的调用EnableEvents
方法向感兴趣的日志事件发起订阅。
internal sealed class MyEventListener : EventListener{protected override void OnEventSourceCreated(EventSource eventSource){if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime")){EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));}}}
事件消费
接下来我们需要进行重写OnEventWritten
,关于日志事件相关的信息会被封装成一个EventWrittenEventArgs
对象,我们不仅可以通过它获取当前日志事件的所有信息,而且我们还可以进行获取到EventSource
对象。Payload
包含了不同属性的值ReadOnlyCollection<object>
, 而PayLoadNames ReadOnlyCollection<object>
中包含了不同的属性名称,我们现在可以通过如下方式进行获取这些属性:
protected override void OnEventWritten(EventWrittenEventArgs eventData){Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}");for (int i = 0; i < eventData.Payload.Count; i++){string payloadString = eventData.Payload[i]?.ToString() ?? string.Empty;Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");}Console.WriteLine("\n");}
参考
https://stackoverflow.com/questions/61081063/get-total-number-of-allocations-in-c-sharp
.NET必知的EventCounters性能指标监视器相关推荐
- 程序猿必知英语词汇总结
程序员必知1700英语单词 这篇文章对英语基础不好的小白特别有帮助 转自:https://blog.csdn.net/z770816239/article/details/80043967 1. fi ...
- Android 性能优化必知必会(2020-5-16)
做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...
- MySQL必知必会01:一个完整的存储过程
阅读整理自<MySQL 必知必会>- 朱晓峰,详细内容请登录 极客时间 官网购买专栏. 文章目录 创建 MySQL 数据库 确认字段 创建数据表 查看表结构 查看数据库中的表 设置主键 插 ...
- 程序员必知8大排序3大查找(三)
前两篇 <程序员必知8大排序3大查找(一)> <程序员必知8大排序3大查找(二)> 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈) 一.顺序查找的基 ...
- Android 开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Androi ...
- Python工程师求职必知的经典面试题
最近几年,学习Python语言的同学越来越多,学成之后大家对于后期的面试都遇到了很多难题,小编这次为大家整理了一份关于Python工程师求职必知的经典面试题!希望能够帮助到正在找Python工作的同学 ...
- servlet必知细节(三)-- DefaultServlet
servlet必知细节(三)-- DefaultServlet 缺省servlet:org.apache.catalina.servlets.DefaultServlet,作用是处理其他servlet ...
- servlet必知细节(二)--servlet执行过程
servlet必知细节(二)--servlet执行过程 我们知道,servlet没有main函数,那么,servlet是怎么调用的呢? 实际上,servlet 是由tomcat调用的,tomcat调用 ...
- servlet必知细节(一)
servlet必知细节(一) 今天复习了一下servlet,有过一些编程经验后,与最初学习servlet相比,对servlet理解的角度不同了,最初只是学习了如何写一个servlet,api怎么用,现 ...
最新文章
- bzoj1624:[Usaco2008 Open] Clear And Present Danger 寻宝之路
- Android面试题目之六---Handler,Looper和MessageQueue深入研究
- 大于小于优化_以MySQL为例,详解数据库索引原理及深度优化
- php俩个字符串合并,php分割合并两个字符串的函数实例
- GetModuleFileName 获取当前进程主模块完整路径
- linux下oracle数据库升级,Oracle数据库在LinuxAS4升级
- HDU4577(2013年ACM杭州赛区邀请赛B题)
- 代码雨代码源复制_小程序基于Parser添加长按复制、代码高亮等功能
- 【LeetCode1046】最后一块石头的重量(堆heap)
- 这次,甘肃的老百姓办理就医再也不用等了
- 小众却顽强的编程语言 Erlang ,你了解多少?
- 为什么要学数据结构?| 原力计划
- Nssm Edit XXX
- SMART Utility for mac (硬盘检测工具)
- 12c emcc Algorithm negotiation fail
- idea更换源_在Intelij IDEA中修改阿里Maven源
- mysql sql 分析工具下载_DB Query Analyzer下载
- CATIA二次开发过程中几个问题
- python实现千牛客服自动回复语_千牛自动回复语大全
- 人工智能教学中的功利文化视野