【问题标题】:heap memory touches new high every time堆内存每次都触及新高
【发布时间】:2015-12-29 12:24:29
【问题描述】:

我的图表中的窥视每次都触及新高。 我的 vm 参数如下,

-XX:+UseCompressedOops -XX:+TieredCompilation -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000

争论是好是坏?

【问题讨论】:

  • 你可能有某种内存泄漏。
  • 当您按下“Perform GC”按钮时,JVM 会运行“stop the world”垃圾回收。运行 gc 后,您将看到无法释放的内存量。如果这个数量随着时间的推移而增加(不时按“Perform GC”),很可能是内存泄漏。
  • 同意其他人在这里已经说过的话。只是一个小建议:您可能会删除-XX:+UseCompressedOops。现代 JDK 版本默认启用了压缩 oops。见stackoverflow.com/questions/11054548/…

标签: java heap-memory


【解决方案1】:

这对我来说看起来很正常。

对象是在 Eden 空间中创建的,您似乎拥有大约 400 MB 的 Eden。 (峰值和最小内存使用量之间的大小)

这表示您每 3 小时或大约 400 MB/小时创建其中大约 3 个。注意:您的监控工具可能会产生大量甚至大部分此类垃圾。

在每个次要收集之后,幸存的对象被添加到幸存者空间。一旦这些对象被复制了足够多的次数,它们就会被添加到永久空间中。

当您使用 JMX / RMI 时,这可能是伊甸园和保留对象中产生垃圾的主要原因。我建议您重新连接并执行完整的 GC。这会让您知道实际保留了多少。

如果完全 GC 后保留的数量在增加,则可能存在内存泄漏。

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2012-07-13
    • 2017-02-13
    • 2017-02-16
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多