内存泄漏-解决间歇性垃圾收集问题- Java



我在Windows 2008下的JDK 1.6上运行spring企业应用程序。该应用程序在随机时间变得缓慢或无响应。我怀疑这是内存泄漏和GC是踢到超过驱动器。

如何在不使用java.exe -verbose:gc参数重启JVM的情况下解决这个问题?我真的不能关闭这个应用程序。我计划在它上做AppDynamics一旦我可以重新启动它,但我知道我能做什么?我有什么选择?

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

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

如果你看到真正的内存泄漏,你会看到GC Over head到达错误

最新更新