.NET有类似于Java垃圾回收日志的功能吗?

18

.NET有类似于Java垃圾回收日志的东西吗? 我想在生产应用程序中将GC统计信息写入日志中。 Google没有提供任何有用的信息,SO也没有相关的问题。

谢谢


此外,我需要在客户机器上生成这些日志。偶尔我会收集这些日志并分析GC性能(GC何时运行,花费多少毫秒,没有更多的信息)。 - Shahbaz
4个回答

6

GC统计数据可用作性能计数器。在perfmon中,它们显示在“.NET CLR Memory”类别下。您可以通过System.Diagnostics命名空间(PerformanceCounterXxx类)以编程方式访问性能计数器,或使用Server Explorer创建方便的包装器。

请注意,这些是统计数据,不提供详细的每个对象日志记录。


3

当性能统计数据告诉你存在问题时,你可以使用调试器(windbg)来查找内存泄漏。!GCRoot命令允许你找出为什么内存没有被回收。有关更多信息,请参见此博客文章


0

您可以使用垃圾回收通知自行设置一些GC日志记录级别。但请注意,如果您正在使用ConcurrentGC,这对于服务器端应用程序来说是典型的,您只会收到停止世界GC的通知。因此,它不像Java等效方法那样完整,但也是有用的。

通过ETW日志记录还提供了相当多的与GC相关的信息。可能可以连接自己的ETW监听器并以这种方式提取信息,但我不知道是否有预先制作的方法可以这样做。


0
针对新的dotnet应用程序,我会考虑使用GC.GetGCMemoryInfo()方法,它具有关于GC的大量不同遥测数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接