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

解决间歇垃圾收集问题-Java,java,memory-leaks,garbage-collection,live,Java,Memory Leaks,Garbage Collection,Live,我在Windows 2008下的JDK 1.6上运行了spring enterprise应用程序。应用程序在随机时间变慢或无响应。我怀疑是内存泄漏,GC正在进入超驱动 如何在不使用java.exe-verbose:gc参数重新启动JVM的情况下解决此问题?我真的无法关闭此应用程序。我正计划在可以重新启动后对其执行AppDynamics,但不知我能做些什么?我的选项是什么?启动应用程序并在PID上运行jconsole。运行时,请查看控制台中的堆。当它接近最大值时,会得到堆转储。下载EclipseM

我在Windows 2008下的JDK 1.6上运行了spring enterprise应用程序。应用程序在随机时间变慢或无响应。我怀疑是内存泄漏,GC正在进入超驱动


如何在不使用java.exe-verbose:gc参数重新启动JVM的情况下解决此问题?我真的无法关闭此应用程序。我正计划在可以重新启动后对其执行AppDynamics,但不知我能做些什么?我的选项是什么?

启动应用程序并在PID上运行jconsole。运行时,请查看控制台中的堆。当它接近最大值时,会得到堆转储。下载EclipseMat并解析堆转储。如果您注意到保留的堆大小大大小于实际的二进制文件,请在设置-keep_unreachable_对象的情况下解析堆转储

如果后者是真的,并且您正在执行完整的GC,那么您可能经常会发生某种泄漏。请记住,当我说泄漏时,我不是指GC无法保留内存的泄漏,而是指如何构建大型对象并使其经常无法访问,从而导致GC消耗大量CPU时间


如果您看到的是真正的内存泄漏,那么您将看到GC Over head reach错误

@Mat Banik没有一种明确的方法来正确处理PID。我通常只是启动应用程序并观察哪个新的java.exe已经启动。另外,虚拟内存最多的一个通常会指向我在这种情况下所看到的位置