G1 Collector 不做 full GC
G1 Collector not doing full GC
切换到 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
没有 Full GC,大量 space 分配给了老年代,年轻代发生了太多回收。
通过 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.4min 1 0.1min 158min
并且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?
老年代的很多对象保存在 TimeToIdle 为 10 分钟的 ehcache 中,但是如果相同的对象在到期后没有被请求或者缓存未满,则 ehcache 不会清理对象。
-Xmx10g -XX:InitiatingHeapOccupancyPercent=80
我的高等算术告诉我 10GB 的 80% 是 8GB。
OU 7.7G
那还不到 8。
因此不会启动并发循环。设置较低的 IHOP 或不明确设置它,以便 G1 可以在运行时自动调整它。
切换到 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
没有 Full GC,大量 space 分配给了老年代,年轻代发生了太多回收。
通过 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.4min 1 0.1min 158min
并且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?
老年代的很多对象保存在 TimeToIdle 为 10 分钟的 ehcache 中,但是如果相同的对象在到期后没有被请求或者缓存未满,则 ehcache 不会清理对象。
-Xmx10g -XX:InitiatingHeapOccupancyPercent=80
我的高等算术告诉我 10GB 的 80% 是 8GB。
OU 7.7G
那还不到 8。
因此不会启动并发循环。设置较低的 IHOP 或不明确设置它,以便 G1 可以在运行时自动调整它。