解决间歇性垃圾收集问题 - Java

时间:2011-07-05 20:11:07

标签: java memory-leaks garbage-collection live

我在Windows 2008下运行JDK 1.6上的spring企业应用程序。该应用程序在随机时间变慢或无响应。我怀疑它是内存泄漏,GC正在开车过度。

如何在不使用java.exe -verbose:gc参数重新启动JVM的情况下对此进行故障排除?我真的无法关闭这个应用程序。一旦我可以重新启动它,我打算在它上面做AppDynamics,但是知道我该怎么办?我有什么选择?

1 个答案:

答案 0 :(得分:3)

启动应用程序并在PID上运行jconsole。在运行时查看控制台中的堆。当它接近maxes时获得堆转储。下载Eclipse MAT并解析堆转储。如果您注意到保留的堆大小远远小于实际的二进制文件,那么在设置了-keep_unreachable_objects的情况下解析堆转储。

如果后者是真的并且你经常做一个完整的GC,你可能会发生某种泄漏。请记住,当我说泄漏时,我并不是指GC无法保留内存的泄漏,而是一些如何构建大型对象并使它们无法访问的频率足以导致GC消耗大量CPU时间。

如果您看到真正的内存泄漏,您会看到GC Overhead达到错误