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

标签 java memory-leaks garbage-collection live

我有一个在 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 reached 错误

关于java - 解决间歇性垃圾收集问题 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588296/

相关文章:

java - ImapIdleChannelAdapter 未获取消息内容

c++ - 这段代码有什么问题?为什么显示 : Debug assertion failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)?

java - 如何在 Kotlin 中传递有界通配符类型参数?

orm - 内存泄漏 Symfony2 Doctrine2/超出内存限制

c++ - 我的内存没有被释放

android - 垃圾回收在 Android 4.2 Jelly bean Dalvik VM 中是如何工作的?

java - 超出 GC 开销限制

python - 将内存从 Python 释放回操作系统的方法?

java - java中 double 的乘法给出了错误的结果

java - 在JAXB中,如何使用@XmlJavaTypeAdapters注解?