2

切换到 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,分配给老年代的大空间和年轻代发生的收集太多。

通过 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?

老一代中的很多对象都保存在 ehcache 中,TimeToIdle 为 10 分钟,但如果在过期后没有请求相同的对象或缓存未满,ehcache 不会清理对象。

4

1 回答 1

4

-Xmx10g -XX:InitiatingHeapOccupancyPercent=80

我的高级算术技能告诉我,10GB 的 80% 是 8GB。

OU 7.7G

那还不到8。

因此不会启动并发循环。设置较低的 IHOP 或不明确设置,以便 G1 可以在运行时自动调整它。

于 2016-07-24T19:21:41.497 回答