w3wp.exe CPU 利用率高——GC 问题?

w3wp.exe CPU 利用率高——GC 问题?

我接手了一个使用大量会话状态的网站。我们最近经历了长时间持续的高 CPU 使用率(约 95-100%)。

当使用 DebugDiag 进行调试时,它显示大型对象堆上有~3gb,我相信这是由 GC 在第 2 代收集的,可能是导致 CPU 使用率高的原因。

我几乎没有调试此类场景的经验,但上述内容听起来像是 CPU 使用率高的合理原因吗?

谢谢。

答案1

您可以使用性能监视器和“.NET Memory\% Time in GC”性能计数器来验证 GC 是否是问题所在。如果服务器上只有一个 .NET 进程,则只需使用 _total 实例即可。否则,您必须找到具有匹配进程 ID 的实例并观察该实例(但请注意,如果任何应用程序启动或关闭,您的应用程序的实例名称可能会随时更改)。

如果此计数器中的峰值与 CPU 峰值相对应,则垃圾回收就是您的问题所在——您需要查找泄漏、分配更少的对象、将对象保持在足够小的范围内,以使其远离 LOH、减少它们的使用时间、重复使用它们和/或消除析构函数。这些措施中的每一个都将减少在 GC 中锁定的时间。具有讽刺意味的是,过多的缓存会使您的网站不一致地无响应,因为缓存的项目最终会进入堆 2,并且当 GC 扫描堆 2 中的每个项目时,请求处理会暂停。随着内存压力的增加,这些锁定的频率会增加,直到最终您的请求完全耗尽。

相关内容