2014-02-18 39 views
0

垃圾收集奇怪的現象,我們有一個非常奇怪的行爲與一個Tomcat 7上運行(與Java 1.6)在Tomcat

的應用我們的應用程序的一個運行了一些日子真的很好,然後我們看到了一個高峯垃圾收集時間,CPU使用率是他正常負荷的10餘倍,內存不再被釋放:

Used Memory

的最後一滴水是應用程序,所以性能得到更好的重新啓動。就像你在圖中看到的那樣,由GC釋放的空間在每次運行時越來越低,並且最終不會釋放任何內存,所以應用程序的性能非常低。

這種行爲如何改善?

回答

3

這看起來像內存泄漏 - 如果GC不能釋放內存,它很可能是由於一些代碼保留對未使用對象的引用。您應該嘗試追蹤內存中剩餘的對象(您的圖形工具應該有一些方法可以查看堆內存區域,並向您提供有關創建對象的信息),並確保清除對未使用對象的引用,以便GC可以釋放他們。

+0

爲了追蹤堆中未使用的對象,可以使用屬於JDK的jvisualvm。 – emre

+0

嗯,好吧,我採取了堆轉儲,但我怎麼知道哪些對象有引用和未使用? –

+0

我們發現內存泄露!謝謝! –