AOT漫谈专题(第二篇): 如何对C# AOT轻量级APM监控

💡 原文中文,约5500字,阅读约需14分钟。
📝

内容提要

文章介绍了如何对.NET Native AOT程序进行轻量级APM监控。首先,通过配置EventSourceSupport保留eventpipe组件,以便使用dotnet-counter监控内存和CPU指标。其次,利用windbg手动分析托管堆数据和GC信息。目前.NET AOT不支持sos级分析,但未来版本可能会改善。

🎯

关键要点

  • 文章介绍了如何对.NET Native AOT程序进行轻量级APM监控。

  • 通过配置EventSourceSupport保留eventpipe组件,以便使用dotnet-counter监控内存和CPU指标。

  • AOT在ilc编译过程中采用摇树优化,eventpipe跟踪组件默认不加入。

  • 在csproj中配置EventSourceSupport为true以保留eventpipe。

  • 使用dotnet cli进行public发布后,可以用dotnet-counter监控程序的托管堆和CPU等指标。

  • 虽然没有开启EventPipe,仍然可以通过coreclr底层了解程序信息。

  • sos在AOT中无法使用,但可以手动挖掘托管堆数据。

  • 可以通过windbg分析当前机器的内存总量和CPU核心数。

  • 捕获GC触发信息有助于了解GC的触发代和原因。

  • 目前.NET AOT不支持sos级分析,未来版本可能会改善。

延伸问答

如何对.NET Native AOT程序进行APM监控?

可以通过配置EventSourceSupport保留eventpipe组件,并使用dotnet-counter监控内存和CPU指标。

在csproj中如何配置EventSourceSupport?

在csproj文件中添加<EventSourceSupport>true</EventSourceSupport>即可。

如何使用windbg分析托管堆数据?

可以手动挖掘托管堆数据,使用windbg命令访问coreclr的gc_heap数据。

目前.NET AOT对sos级分析的支持情况如何?

目前.NET AOT不支持sos级分析,但未来版本可能会改善。

如何监控程序的托管堆和CPU指标?

使用dotnet cli进行public发布后,可以用dotnet-counter监控程序的托管堆和CPU等指标。

如何捕获GC触发信息?

可以在gc触发的必经之路上下断点,例如在gc1函数上设置断点。

➡️

继续阅读