2011-07-05 32 views
3

我在Windows 2008下的JDK 1.6上運行了Spring企業應用程序。該應用在隨機時間變慢或無響應。我懷疑這是內存泄漏,GC正在過度驅動。解決間歇性垃圾收集問題 - Java

如何在不使用java.exe -verbose:gc參數重新啓動JVM的情況下排除此故障?我真的不能關閉這個應用程序。我計劃一旦我可以重新啓動AppDynamics,但知道該怎麼辦?我有什麼選擇?

回答

3

啓動應用程序並在PID上運行jconsole。它正在運行看看控制檯中的堆。當它接近最大時得到堆轉儲。下載Eclipse MAT並解析堆轉儲。如果您注意到保留的堆大小遠小於實際的二進制文件,則將設置-keep_unreachable_objects解析堆轉儲。

如果後者是真實的,並且你正在做一個完整的GC,你可能會發生某種泄漏。請記住,當我說泄漏時,我並不是指GC無法保留內存的泄漏,而是一些如何構建大型對象並使其無法訪問的情況,足以導致GC消耗大量CPU時間。

如果你看到真正的內存泄漏,你會看到GC在頭達到了錯誤

+0

注意jvisualvm可以有很多的這方面的幫助。 –

+0

@Mat Banik沒有一個明確的方法來獲得PID的權利。我通常只是啓動應用程序,並觀察哪個新的java.exe已經啓動。另外,虛擬內存最多的虛擬內存通常指向我正在尋找這種情況的位置 –