【问题标题】:Java: New Generation Used 100%, Eden Space Used 100%, From Space Used 100%Java:New Generation Used 100%, Eden Space Used 100%, From Space Used 100%
【发布时间】:2012-06-30 00:29:32
【问题描述】:

jmap -heap 给我的输出是:

New Generation Used 100%, Eden Space Used 100%, From Space Used 100%, To Space used: 0%, Perm Generation Used: 38%

这是来自太空的 100% 的新伊甸园 - 一个问题吗?

我的 JAVA 选项是:-Xms10240m -Xmx14336m -XX:PermSize=192m -XX:MaxPermSize=256m -XX:NewSize=8192m -XX:MaxNewSize=8192m -XX:-DisableExplicitGC -XX:+UseConcMarkSweepGC - XX:CMSInitiatingOccupancyFraction=60

我看到很多快速垃圾收集。但是使用 JConsole 等工具不会发生内存泄漏

可以在此处查看内存使用情况: http://tinypic.com/view.php?pic=wo213&s=6

JDK 1.6 正在使用中。

【问题讨论】:

  • 您的软件是否遇到问题?
  • 应用程序偶尔被报告为缓慢。总体内存使用情况很好,远低于最大内存。但是 New Gen、Eden 等如果经常接近 100%。会不会是这个问题?
  • New Gen 和 Eden 已满可能会触发大量快速 GC。使用 jstat 检查一下,如果 GC 太多,您可能需要增加 Eden 和/或 NewGen 空间。不过,要找到最佳配置,这将是一个反复试验的过程。

标签: java memory garbage-collection heap-memory jmap


【解决方案1】:

我发现以下两个命令非常有用

jstat -gc

jstat -gcutil

【讨论】:

    【解决方案2】:

    检查内存泄漏可能是谨慎的。使用 visualVM 或其他一些工具(例如 Eckipse 内存分析器)并将其附加到进程。

    一旦你知道什么是泄漏,你就可以找到持有对象引用的东西,例如

    jmap -dump:live,file=heap.dump.out,format=b <pid>
    
    jhat heap.dump.out
    

    另外,只是想知道这是什么 JVM 版本,你为 GC 传递的参数等等。

    【讨论】:

      【解决方案3】:

      这就是世代收集的工作原理。 你有年轻空间(eden、from、to)和老空间(tenure、perm)。年轻的空间更小。一旦年轻空间已满(您的情况) - 称为次要 GC(年轻 GC)的事情正在发生。

      但次要 GC 应该很快。一旦旧空间已满,就会发生完整的 GC(这会更耗时)。

      想法是让快速的次要 GC 更频繁,而完整 GC 的频率要低得多。

      你可以在article阅读更详细的解释

      【讨论】:

        猜你喜欢
        • 2013-04-27
        • 2022-12-26
        • 1970-01-01
        • 2014-11-29
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 2013-03-04
        相关资源
        最近更新 更多