【问题标题】:JVM is allocating too much spaceJVM 分配了太多空间
【发布时间】:2014-07-11 06:45:00
【问题描述】:

我一直在运行两个使用 nginx 集群的 tomcat 实例。在我的 tomcats 上,我将 Infinispan 作为分布式缓存运行。当我在缓存中插入大约 4mio 记录时,会发生一些奇怪的事情。在图 1 中你可以明白我的意思。 JVM 分配的内存比以往任何时候都多,并且在使用后不会释放。

JVM参数:

  • Xmx8g
  • XX:NewRatio=4
  • XX:SurvivorRatio=8
  • XX:+UseCompressedOops
  • XX:+UseConcMarkSweepGC
  • XX:+UseParNewGC
  • XX:+DisableExplicitGC
  • XX:+UseCMSInitiatingOccupancyOnly
  • XX:+CMSClassUnloadingEnabled
  • XX:+CMSScavengeBeforeRemark
  • XX:CMSInitiatingOccupancyFraction=68
  • XX:MaxHeapFreeRatio=20
  • XX:MinHeapFreeRatio=10

您能否解释一下为什么即使我将 MAXHeapFreeRatio 设置为 20%,JVM 也不会释放分配的内存?

【问题讨论】:

    标签: java tomcat jvm


    【解决方案1】:

    您可以参考this SO post 以了解此处注意到的问题是否适用于您,以及为什么您没有看到您的内存按预期释放。

    tl;dr 版本是,似乎人们发现串行 GC 配置是唯一真正关注最小/最大堆比率选项的配置,但对于您的特定情况可能会有所不同。

    Further reference 可能会对 GC 的行为有所了解。

    【讨论】:

    • 我尝试了串行 GC 配置,但 JVM 不会释放内存。
    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多