2010-01-08 85 views
18

.NET是否有类似Java的垃圾回收日志?我想将GC统计信息写入生产应用程序中的日志。谷歌没有告诉我有用的东西,所以也没有任何相关的问题。.NET是否有类似于Java的垃圾回收日志?

谢谢

+0

此外,我需要在客户机器上生成这些日志。每隔一段时间我会收集日志并分析GC性能(当gc运行时,花费了多少毫秒,没有太多信息) – Shahbaz 2010-01-09 03:31:09

回答

6

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

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

3

当perf数据告诉你存在问题时,可以使用调试器(windbg)来查找泄漏。 !GCRoot命令可以让你找出为什么没有收集到内存。有关更多信息,请参见this blogpost

0

您可以使用Garbage Collection Notifications自行设置某种级别的GC日志记录。但请注意,如果您使用ConcurrentGC,这对于服务器端应用程序来说是典型的,那么您只会收到停止全球GC的通知。所以它不像Java的等价物那么完整,但它是一些东西。

也有相当多的GC相关信息可通过ETW记录获得。可能通过这种方式连接您自己的ETW侦听器并提取信息,但我不知道预先做好的方法。