Central-Processing-Unit

高 CPU 使用率 w3wp.exe - GC 問題?

  • December 13, 2014

我繼承了一個使用大量會話狀態的網站。我們最近經歷了長時間持續的高 CPU ~95-100%。

使用 DebugDiag 進行調試時,它顯示大對象堆上大約有 3gb,我相信它是由 GC 在 Gen 2 中收集的,可能是高 cpu 的原因。

我幾乎沒有調試此類場景的經驗,但上述是否是高 CPU 的合理原因?

謝謝。

您可以使用性能監視器和“.NET Memory% Time in GC”性能計數器來驗證 GC 是否是問題所在。如果伺服器上只有一個 .NET 程序,則可以只使用 _total 實例。否則,您必須找到具有匹配程序 ID 的實例並觀察該實例(但請注意,如果任何應用程序啟動或關閉,您的應用程序的實例名稱可能會即時更改)。

如果此計數器中的峰值對應於 CPU 峰值,則垃圾收集是您的問題 - 您將需要查找洩漏,分配更少的對象,保持足夠小的東西以使它們遠離 LOH,減少它們的時間,重用它們,和/或消除解構子。這些事情中的每一個都會減少鎖定在 GC 中的時間。具有諷刺意味的是,過多的記憶體會使您的站點不一致地無響應,因為記憶體的項目最終會在堆 2 中結束,並且在 GC 掃描堆 2 中的每個項目時請求處理會暫停。隨著記憶體壓力的增加,這些鎖定的頻率會增加,直到最終你的請求完全被餓死了。

引用自:https://serverfault.com/questions/650019