2011-02-08 56 views
6

我想確定我的webapp中是否有內存泄漏。我使用VisualVM和JMeter來加載測試並觀察堆。Eclipse內存分析器 - 泄漏可疑報告沒有指向我的類 - 爲什麼?

我昨天保存了一個堆轉儲文件並下載了Eclipse Memory Analyzer ......在經歷了VisualVM的很多挫折之後,我認爲Eclipse會精確定位漏洞,如果有的話,比VisualVM更好。

我在Eclipse中打開了堆文件,並運行他們所稱的泄漏可疑報告。我認爲它會指向我的web應用程序中的特定類,但它不會。所以我不知道如何使用它提供的信息來找出泄漏嫌疑犯在哪個特定類別的礦區。

下面是我的一個堆轉儲文件的泄漏可疑報告的結果。

 
One instance of "org.apache.catalina.session.StandardManager" loaded by "org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0" occupies 16,977,376 (48.54%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "". 


Keywords 
org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0 
org.apache.catalina.session.StandardManager 
java.util.concurrent.ConcurrentHashMap$Segment[] 

報告中詳細信息的其餘部分如附圖所示。我希望圖像可以擴大看看... enter image description here

我知道Eclipse應該是非常好的軟件。這是我最後一次嘗試使用類似的方法來查找內存泄漏 - 我只知道這個軟件可以用於這樣的知識。教程和幫助頁面描述的事情,就好像你應該知道點擊幾下後該做什麼......我需要更多的幫助。

回答

3

雖然我沒有任何使用Eclipse查找泄漏的經驗,但我會首先提出一個問題:您是否確定存在內存泄漏?從你的問題來看,這聽起來並不像你確信你有泄漏,但你正在測試,看看你是否有一個。最簡單的測試方法是啓動你的應用程序,記下它正在消耗多少內存,讓JMeter連續24小時打它,看看它消耗了多少內存(可能在執行GC之後)。如果您的應用程序消耗了很大一部分內存,或者已經死於OutOfMemoryError,那麼您的內存泄漏。

如果您發現實際上確實有內存泄漏,那麼我會首先建議通過FindBugs運行您的應用程序,以查看它是否可以通過快速靜態分析找到內存泄漏。如果這不起作用,那麼this article(雖然它比較陳舊)可能會幫助您理解Eclipse提供給您的結果。