Java G1收集器未执行完全GC
在切换到java 1.7.0_80后的一周内,观察到这种行为Java G1收集器未执行完全GC,java,garbage-collection,ehcache,g1gc,Java,Garbage Collection,Ehcache,G1gc,在切换到java 1.7.0_80后的一周内,观察到这种行为 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 0 32M 0 32M 512M 128M 9.5G 7.7G 640M 475M 26487 157min 0 0min 157min 没有完整的GC,分配给老一代的空间很大,年轻一代的集合太多 在通过JMX调用完整GC之后 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FG
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
0 32M 0 32M 512M 128M 9.5G 7.7G 640M 475M 26487 157min 0 0min 157min
没有完整的GC,分配给老一代的空间很大,年轻一代的集合太多
在通过JMX调用完整GC之后
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
0 32M 0 32M 5.2G 768M 4.8G 2.7G 640M 475M 26592 158.4分钟1 0.1分钟158分钟
GC次数大大减少
参数为
-Xms10g
-Xmx10g
-XX:PermSize=640m
-XX:MaxPermSize=640m
-XX:SurvivorRatio=30
-XX:MaxTenuringThreshold=15
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:InitiatingHeapOccupancyPercent=80
-XX:G1HeapRegionSize=32m
-XX:ParallelGCThreads=16
可能是因为-XX:MaxGCPauseMillis=100
旧一代中的许多对象保存在ehcache中,时间间隔为10分钟,但如果到期后未请求相同的对象或缓存未满,ehcache不会清理对象。
-Xmx10g-XX:InitiatingHeapOccupencyPercent=80
我的高级算术技能告诉我10GB的80%是8GB
OU 7.7G
不到8
因此,不会启动并行循环。设置较低的IHOP或不显式设置,以便G1可以在运行时自动调整。感谢您的解释。我们误解了它的意思。