如何获取GC(垃圾回收器)的STW(暂停)时间?

本文介绍了如何在.NET环境中获取垃圾回收器(GC)的Stop The World (STW)时间,这对于分析性能和排查延迟问题至关重要。通过使用EventSource和EventListener监听GC事件,以及.NET7的新API,可以有效地计算和监控GC STW Time。
摘要由CSDN通过智能技术生成

前言

在现代的容器化和微服务应用中,因为分布式的环境和错综复杂的调用关系,APM(Application Performance Monitoring 应用性能监控)显得尤为重要,它通过采集应用程序各种指标和请求链路,让你知道系统当前的状态和值得优化的点,另外能帮助你发现应用程序的异常,帮助你更方便的定位问题。

对于.NET这样带GC(Garbage Collector 垃圾回收器)的平台来说,GC的指标也尤为重要,采集可以帮助我们分析内存泄漏、优化系统性能等等。在公司内部已经可以采集比较全面的.NET GC指标,如下图所示。

在绝大多数场景它能满足要求,但是如果遇到某时某刻P95延时突然增大,异步任务突然超时,我们想排查这些异常是否因为GC的STW Time(Stop The World Time 指GC运行过程中所有线程被挂起的时间)过长导致的,就没有办法了,因为目前没有采集这些指标。

所以本文就带大家了解一下,如何采集.NET GC STW Time。

方法

如.NET内存性能分析指南中提到的一样,.NET Runtime在运行过程中会发布很多事件,这些事件代表了当前Runtime的运行状态,同样GC在运行过程中也会发布很多事件,我们可以使用 PerfView 工具来收集这样的一些事件。下面是 WorkStationGC 发生GC时的一个事件序列。

Microsoft-Windows-DotNETRuntime/GC/SuspendEEStart	//开始暂停托管线程运行
Microsoft-Windows-DotNETRuntime/GC/SuspendEEStop	//暂停托管线程完成
Microsoft-Windows-DotNETRuntime/GC/Start	// GC开始回收
Microsoft-Windows-DotNETRuntime/GC/Stop		// GC回收结束
Microsoft-Windows-DotNETRuntime/GC/RestartEEStart	//恢复之前暂停的托管线程
Microsoft-Windows-DotNETRuntime/GC/RestartEEStop	//恢复托管线程运行完成

PS: 所有的事件都可以在 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值