JVM分配的空间太大

时间:2014-07-11 06:45:00

标签: java tomcat jvm

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

Heap Tomcat 1

Heap Tomcat 2

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也不会释放分配的内存?

1 个答案:

答案 0 :(得分:0)

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

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

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