我一直在运行两个用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
你可以向我解释一下为什么JVM没有释放分配的内存,即使我将MAXHeapFreeRatio设置为20%?
1 回答
您可以参考this SO post来查看此处发现的问题是否适用于您,以及为什么您没有按预期释放内存 .
tl; dr版本似乎人们发现串行GC配置是唯一真正关注最小/最大堆比率选项的配置,但对于您的特定情况可能会有所不同 .
Further reference可能会对GC的行为有所了解 .