2015-04-21 128 views
2

閱讀了很多關於MAT後,我用我的生產堆轉儲分析內存泄漏問題。這是在泄漏報告錯誤:內存泄漏:如何解決

The thread org.apache.tomcat.util.threads.TaskThread @ 0x6d8be0a30 http-bio-8443-exec-115 keeps local variables with total size 3,695,816,440 (89.03%) bytes.

The memory is accumulated in one instance of "java.lang.Object[]" loaded by "'<'system class loader'>".

支配樹摘要顯示以下內容:

org.apache.tomcat.util.threads.TaskThread @ 0x6d8be0a30 http-bio-8443-exec-115 SH:112 RH:3,695,816,440 Prct:89.03% java.util.ArrayList @ 0x6da437cd8 SH:24 RH:3,695,668,184 Prct:89.03% java.lang.Object[1823230] @ 0x77da34ee8 SH:7,292,936 RH:3,695,668,160 Prct:89.03% com.cjs.persistence.dto.SomeDTO @ 0x76f631650 SH:360 RH:2,264 Prct:0.00% com.cjs.persistence.dto.SomeDTO @ 0x750ed8f88 SH:360 RH:2,264 Prct:0.00% ...

到GC根的路徑顯示線程本身。我無法找到造成這種情況的原因以及爲什麼保留這些DTO列表以及如何清除它們。任何建議是非常感謝。

回答

0

其實,我們不能幫你這個樣子,如果你想解決的泄漏問題,你必須得到很多投入,比如GC細節,線程轉儲等

但是,我可以建議做到以下幾點:

從你的投入,我可以告訴你的泄漏問題造成該得到通過一定的方法填補,它似乎有一個循環或複雜的業務或任何其他因素的局部變量。

Please note: that the GC root for local variable will be alwas the its parent thread itself.

在這種情況下,你必須得到該線程的stacktrace,它會告訴你究竟該線程是幹什麼的,這樣你就可以開始從他們的調查。

+0

感謝您的答覆。堆棧跟蹤中指出,從數據庫中獲取其他和someEntity填寫SomeDTO,沒有什麼方法。 – sMajeed