我正在解決用作集成服務的Windows服務中的內存泄漏問題。檢測內存泄漏使用PerfView
通過「doIntegration()」調用,我可以看到內存使用量比調用前高,並且每次調用大約增加0.5 MB。
我曾嘗試使用PerfView來查找內存泄漏的位置。
故障處理方法:
1)第一doIntegraion呼叫
2)取堆快照doIntegration呼叫
3)做前後取堆快照步驟2多次
4 )檢查每個呼叫的方法/組變得更高
5)在單獨的快照上使用diff來定位哪裏e內存泄露是
我可以看到LIB mscorlib!RuntypeType是每次都會變高的方法/組。當我嘗試檢查什麼是指它,我得到
- 已固定處理
- .NET根
- ROOT
- .NET根
而且我不能更多地展開樹。
當我選擇視圖時,RefTree可以看到更多的東西。
- ROOT 100%
- .NET ROOT 100%
- 已固定手柄70.6%
- LIB mscorlib程序!RuntimeType 46%
- LIB mscorlib程序!反射.... 13.4% ...
- 靜態乏30.7%
- ns.ConfigurationSettings 59.5%
- ns.Leaks.ConfigurationSettings -33。3%
- 已固定手柄70.6%
- .NET ROOT 100%
我已經做一個diff在幾個快照,以及唯一的方法/組遞增是被釘扎手柄和它們僅指MSCORLIB類型。
有沒有其他人有這種問題?
我認爲這個問題可能是使用XMLSerializer從Model到XML的序列化,但我不太確定。
有沒有人知道另一種方法來嘗試找到內存泄漏?
謝謝:)
看看這些對象創建的堆棧軌跡,可能會提示你這些對象是什麼。 –
謝謝!我試圖追蹤它,因爲我認爲這是由於序列化。序列化程序使用創建臨時程序集的構造器打開,顯然該程序集不在GC法律範圍內。因此,每次調用dointegration時,都會創建幾個臨時組件。 – Alex