性能计时器“% Time in GC”会错吗?

Abe*_*bel 2 .net asp.net garbage-collection performancecounter

我们发现,从今天开始,“% Time in GC”(垃圾收集器中的时间百分比)性能计时器稳定地保持在 100%,只是偶尔会稍低一些。即使在晚上也没有访客在线。

然后我把它放在App_Offline.htm根目录下。通常这会导致所有 ASP.NET 活动停止。但由于某些奇怪的原因,“GC 时间百分比”虽然降低至 34%,但仍保持稳定。

我在这里寻找明显的东西吗?其他一些与 GC 相关的性能计数器似乎仍然起作用,但作用不大。

编辑:我写的是“只有今天”,但实际上是“从今天开始”。从那以后它就没有消失过。

Abe*_*bel 5

Jrista 的回答指出了正确的方向,但这种行为的实际原因却大不相同:

“% Time in GC”计数器不是实时计数器。相反,它显示上次 GC 发生时测量的最后一个值。当您使用 关闭 Web 应用程序时App_Offline.htm,GC 将运行并占用一定的百分比。之后,CLR 完全不活动(App_Offline 的目的),因此不会发生进一步的垃圾收集,并且百分比保持不变。因此,即使 ASP.NET CLR 活动为零,也是直线。

这是这个计数器的描述,我复制在这里供参考(并提醒自己在问愚蠢的问题之前先阅读计数器的解释)。

GC 时间百分比是自上次 GC 周期以来执行垃圾收集 (GC) 所花费的时间百分比。该计数器通常指示垃圾收集器代表应用程序收集和压缩内存所做的工作。该计数器仅在每次 GC 结束时更新,并且计数器值反映最后观察到的值;这不是平均值。