1

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

然后我把它放在App_Offline.htm根上。通常这会降低所有 ASP.NET 活动。但出于某种奇怪的原因,“% Time in GC”虽然降至 34%,但仍保持稳定。

我在这里查看一些明显的东西吗?其他一些与 GC 相关的性能计数器似乎也仍然起作用,但幅度很小。

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

4

2 回答 2

3

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

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

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

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

于 2009-12-02T02:10:26.670 回答
2

如果应用程序大部分时间都没有执行任何工作(比如说 1% 的时间是一天中各个时刻的实际工作,但一整天它更像是 0.0000001%),那么这是否意味着,当工作完成时,它是 GC 工作吗?如果 Web 应用程序一整天只完成了 0.0000001% 的工作,那么 GC 完成了一整天完成的总工作的 100%(出于所有意图和目的)当然是合乎逻辑的。无论工作是否完成,GC 都会定期运行,如果没有其他工作正在完成......

还是我误解了这个问题?

于 2009-12-02T00:17:06.047 回答