2013-06-19 119 views
1

我正在嘗試使用node-memwatch來追蹤我的應用程序中的內存泄漏。目前,我在應用程序啓動時創建HeapDiff,然後在mem-watch檢測到泄漏時執行diff操作。我發現了一些看起來可疑的項目,但我不明白我應該如何映射報告給我的代碼。例如,在diff中報告以下項目:使用node-memwatch跟蹤內存泄漏?

{ what: 'String', 
    size_bytes: 4785072, 
    size: '4.56 mb', 
    '+': 32780, 
    '-': 563 }, 

這似乎是內存泄漏的主要嫌疑人。我怎樣才能找出哪一段代碼導致了泄漏?在他們給在其網站上的例子,what通常是明顯的東西像MyLeakyClass,而不是一個系統類型...

回答

1

這是什麼意思是,你已經創建了32780個字符串和垃圾回收563,自開始你HeapDiff。 (你收集的可能不是在這個窗口中創建的;當差異開始時它們可能已經存在)。字符串使用的內存總量增加了4.56mb。這可能都在一個字符串中,或​​者它可以完全均勻地分佈在32k字符串之間。你沒有這方面的數據。

字符串當然會出現在您的代碼中。所以我的建議是,不要看那些。尋找具有更多可跟蹤(可更改,更少,更多)名稱的對象,即使它們看起來比你的字符串增長得更少,也要跟蹤這些對象。在這個過程中,你可能會發現你的大泄漏。