2011-03-03 76 views
1

我的.NET Windows服務中出現System.OutOfMemory異常。我不確定是什麼原因造成的。我懷疑大堆物體中存在碎片,但我不確定。我如何驗證我的假設?如何檢測大對象堆是否導致內存不足異常

我可以使用各種調試器,但是我應該在調試器中尋找什麼?

感謝

+1

您最初是否嘗試過調試源代碼以獲取任何明顯的東西? – 2011-03-03 19:33:51

+1

嗯,這是一個給定的,你永遠不會在它的微小物體上得到OOM。他們總是適合某個地方。使用內存分析器。用真實的生產數據測試您的服務。明年它將是兩倍,覆蓋也是如此。 – 2011-03-03 19:56:00

回答

0

我想這種情況隨機從未在調試你的機器上,對不對?

你可以做的是創建一個轉儲並分析遺骸。

您需要轉向真正的調試大師苔絲。她是調查的Chuck Norris。

Check this out, for example.

2

CLR Profiler是你的朋友這一點。它可以附加到Windows服務,並收集您需要的所有指標,以便在您的OOM命中時找到罪魁禍首。

+0

我應該在CLR Profiler中尋找什麼,它可以讓我知道原因是否是大對象堆? – Mark 2011-03-03 20:16:14

+0

對於您的特定場景,我會說從最終堆字節直方圖開始,然後查找哪種類型的對象正在吸收您的內存。從那裏,您可以右鍵單擊並選擇顯示誰分配並查找哪些方法分配這些大對象。 – 2011-03-03 20:30:18

+0

如果大對象堆永遠不會超過60 MB,它是否仍然是我內存不足異常的原因 – Mark 2011-03-04 21:30:58

相關問題