年轻的GC导致Metaspace增加,而不是Old Gen

时间:2015-07-02 12:55:44

标签: java performance memory-leaks garbage-collection jvm

从JDK7迁移到JDK 8时,我开始看到频繁的Full GC(具有更高的GC延迟)。在分析了gc之后,发现在年轻的GC之后,元空间的使用增加了,而旧的用法保持不变。 我已将最大元空间大小(等于JDK7中的Perm Gen)设置为256MB。当使用率达到210 MB左右时,将触发完整GC。我已经尝试将metaspace max size设置为512MB,然后我也看到Metaspace Threshold导致Full GC。

为什么Young GC会导致元空间大小增长?

GC延迟与JDK8紧密相关。使用JDK7时,GC延迟通常低于100毫秒,而使用JDK8的全GC启动时间为800-1000毫秒。这会影响我的应用程序性能。我正在使用并行GC算法。我怀疑在metaspace上的GC比Old gen GC要耗费更多时间。有关为JDK8调优JVM的任何建议都会非常有用。

Young GC:

S0     S1     E    O     M      CCS   YGC  GCT  FGC  FGCT  GCT  LGCC      GCC 
0.00  40.28 99.78 21.95  56.28   -    149 6.647  2  3.276 9.924 Allocation Failure   No GC 
54.17 0.00  0.66  21.95  57.63   -    150 6.661  2  3.276 9.937 Allocation Failure   No GC

Full GC:

0.00  72.80   0.00  25.15  82.51      -    213    8.550     3    3.276   11.826 Metadata GC Threshold Metadata GC Threshold 
0.00  72.80   0.00  25.15  82.51      -    213    8.550     3    3.276   11.826 Metadata GC Threshold Metadata GC Threshold 

Metaspace使用216684K,容量262051K,承诺262144K,保留262144K 2015-06-30T17:47:16.079 + 0000:17622.342:[完整GC(元数据GC阈值)[PSYoungGen:9550K-> 0K(1035776K)]

0 个答案:

没有答案