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

我已经inheritance了一个使用大量会话状态的网站。 我们最近经历了长时间连续高CPU〜95-100%的时间。

当使用DebugDiag进行debugging时,它显示大对象堆上有〜3gb,我相信这是GC在Gen 2中收集的,可能是高CPU的一个原因。

我几乎没有经验debugging这种情况下,但上述听起来似乎是高CPU的合理原因?

谢谢。

您可以通过使用性能监视器和“GC中的.NET内存\%时间”性能计数器来validationGC是否是问题。 如果服务器上只有一个.NET进程,则可以使用_total实例。 否则,您将不得不查找具有匹配进程ID的实例,并观察该实例(但请注意,如果有任何应用程序启动或closures,实例名称可能会随时更改)。

如果这个计数器的尖峰对应CPU峰值,垃圾收集就是你的问题 – 你需要寻找漏洞,分配更less的对象,保持足够的小,以防止他们的时间,重复使用他们,和/或消除析构函数。 这些东西都会减lesslocking在GC中的时间。 具有讽刺意味的是,太多的caching可能会使站点无法响应,因为caching的项目最终会堆积在堆2中,并且在GC扫过堆2中的每个项目时请求处理暂停。随着内存压力的增加,这些locking的频率会增加,直到最终你的请求完全饿死了。