AOT漫谈专题(第二篇): 如何对C# AOT轻量级APM监控
内容提要
文章介绍了如何对.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函数上设置断点。