【问题标题】:Solving intermittent Garbage Collection problem - Java解决间歇性垃圾收集问题 - Java
【发布时间】:2011-07-05 20:11:06
【问题描述】:

我在 Windows 2008 下的 JDK 1.6 上运行 Spring Enterprise 应用程序。该应用程序在随机时间变慢或无响应。我怀疑这是内存泄漏,GC 正在超速运行。

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

【问题讨论】:

    标签: java memory-leaks garbage-collection live


    【解决方案1】:

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

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

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

    【讨论】:

    • @Mat Banik 没有明确的方法可以正确获取 PID。我通常只是启动应用程序并观察哪些新的 java.exe 已启动。此外,虚拟内存最多的通常指向我在这种情况下正在寻找的位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2014-03-31
    • 2010-12-13
    • 2011-02-23
    • 2011-06-03
    相关资源
    最近更新 更多