当我们捕获并分析转储文件(例如在WinDbg中),常常会出现警告,因为进程在收集转储文件时可能处于GC过程中,导致数据可能不准确或命令不可用。
进行内存分析时,我们通常这样做是因为进程的内存和内存压力很高,这会促使.NET经常进行GC。
如何避免在GC期间捕获转储?是否有一种方法可以知道何时可以安全地捕获转储文件?
当我们捕获并分析转储文件(例如在WinDbg中),常常会出现警告,因为进程在收集转储文件时可能处于GC过程中,导致数据可能不准确或命令不可用。
进行内存分析时,我们通常这样做是因为进程的内存和内存压力很高,这会促使.NET经常进行GC。
如何避免在GC期间捕获转储?是否有一种方法可以知道何时可以安全地捕获转储文件?
每秒分配的字节数
的描述如下:
根据我的测试,如果将性能监视器的更新间隔设置为1秒,并仔细观察显示在垃圾回收堆上每秒分配的字节数。该计数器只在每次垃圾回收后更新,而不是在每次分配时更新。该计数器不是随时间变化的平均值;它显示了在最后两个样本中观察到的值之间的差异,除以样本间隔的持续时间。
每秒分配的字节数
指示器,在收集完成后似乎会显示0
的值。因此,我认为您可以从这个值中推断出是否正在进行收集。procdump ProcessName -s 1 -ma -pl "\.NET CLR Memory(ProcessName)\Allocated Bytes/second" 1000
,如果该值低于一千,则会触发转储。"\.NET CLR-Speicher(ProcessName)\Zugeordnete Bytes/Sek."
。
-pl
开关。 - Thomas WellerProcDump
测试了你的方法,对我很有效。我也更新了答案,希望有所帮助... - Markus Safar