JVM --- MetaspaceSize理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguosb/article/details/86718434

MetaspaceSize含义

  MetaspaceSize容量触发FGC的阈值。比如-XX:MetaspaceSize=256m,当MetaspaceSize容量超过256M时触发FGC,超过设定阈值后MetaspaceSize每扩容一次触发一次FGC;

默认值

  查看命令如下,默认值大约20.8m;

jinfo -flag MetaspaceSize pid

设置建议

  • MetaspaceSize和MaxMetaspaceSize设置一样大;
  • MetaspaceSize值建议设置为应用稳定运行后1.2-1.5倍;

查看应用各分区大小命令:

jstat -gc pid

在这里插入图片描述

JDK8 MetaspaceSize VS JDK7 PermSize

  • MetaspaceSize设定了触发FGC的阈值,实际使用内存按需分配;
  • PermSize设定了永久代使用的空间大小,JVM启动时全部分配;

触发FGC使用回收算法

  使用Old区配置或默认的回收算法

MetaspaceSize GC日志

Java HotSpot(TM) 64-Bit Server VM (25.65-b01) for linux-amd64 JRE (1.8.0_65-b17), built on Oct  6 2015 17:16:12 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
Memory: 4k page, physical 131779324k(10823664k free), swap 0k(0k free)
CommandLine flags: -XX:GCLogFileSize=10485760 -XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=2147483648 -XX:NumberOfGCLogFiles=3 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseGCLogFileRotation -XX:+UseParallelGC
2019-01-30T19:44:18.457+0800: 3.978: [GC (Metadata GC Threshold) [PSYoungGen: 461835K->16112K(611840K)] 461835K->16200K(2010112K), 0.3931600 secs] [Times: user=0.51 sys=0.02, real=0.39 secs]
2019-01-30T19:44:18.851+0800: 4.371: [Full GC (Metadata GC Threshold) [PSYoungGen: 16112K->0K(611840K)] [ParOldGen: 88K->14990K(1398272K)] 16200K->14990K(2010112K), [Metaspace: 20500K->20498K(1067008K)], 0.5014104 secs] [Times: user=0.71 sys=0.03, real=0.50 secs]
2019-01-30T19:44:24.355+0800: 9.876: [GC (Allocation Failure) [PSYoungGen: 524800K->16789K(611840K)] 539790K->31788K(2010112K), 0.0201253 secs] [Times: user=0.14 sys=0.01, real=0.02 secs]
2019-01-30T19:44:26.057+0800: 11.578: [GC (Metadata GC Threshold) [PSYoungGen: 306769K->18447K(611840K)] 321768K->33453K(2010112K), 0.1999213 secs] [Times: user=0.33 sys=0.05, real=0.20 secs]
2019-01-30T19:44:26.257+0800: 11.778: [Full GC (Metadata GC Threshold) [PSYoungGen: 18447K->0K(611840K)] [ParOldGen: 15006K->24189K(1398272K)] 33453K->24189K(2010112K), [Metaspace: 34427K->34427K(1079296K)], 0.2967989 secs] [Times: user=0.60 sys=0.01, real=0.30 secs]
2019-01-30T19:44:30.564+0800: 16.084: [GC (Allocation Failure) [PSYoungGen: 524800K->8554K(611840K)] 548989K->32751K(2010112K), 0.0120064 secs] [Times: user=0.11 sys=0.02, real=0.01 secs]
2019-01-30T19:44:35.154+0800: 20.675: [GC (Allocation Failure) [PSYoungGen: 533354K->12328K(611840K)] 557551K->36534K(2010112K), 0.0101480 secs] [Times: user=0.13 sys=0.01, real=0.01 secs]
2019-01-30T19:44:42.964+0800: 28.484: [GC (Allocation Failure) [PSYoungGen: 537128K->15493K(678400K)] 561334K->39707K(2076672K), 0.3960979 secs] [Times: user=0.74 sys=0.03, real=0.39 secs]
2019-01-30T19:44:51.856+0800: 37.377: [GC (Allocation Failure) [PSYoungGen: 672901K->20467K(677888K)] 697115K->45186K(2076160K), 0.2940298 secs] [Times: user=0.38 sys=0.03, real=0.29 secs]
2019-01-30T19:45:00.491+0800: 46.011: [GC (Allocation Failure) [PSYoungGen: 677875K->20974K(667648K)] 702594K->49184K(2065920K), 0.0700194 secs] [Times: user=0.18 sys=0.04, real=0.07 secs]
2019-01-30T19:45:03.267+0800: 48.787: [GC (Metadata GC Threshold) [PSYoungGen: 254075K->23468K(670208K)] 282284K->51685K(2068480K), 0.2873181 secs] [Times: user=0.43 sys=0.01, real=0.29 secs]
2019-01-30T19:45:03.555+0800: 49.075: [Full GC (Metadata GC Threshold) [PSYoungGen: 23468K->0K(670208K)] [ParOldGen: 28217K->41916K(1398272K)] 51685K->41916K(2068480K), [Metaspace: 56641K->56641K(1101824K)], 2.2062810 secs] [Times: user=4.30 sys=0.10, real=2.20 secs]
2019-01-30T19:45:11.071+0800: 56.591: [GC (Allocation Failure) [PSYoungGen: 646656K->9385K(670208K)] 688572K->51310K(2068480K), 0.0079215 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]

参考:

  1. https://www.jianshu.com/p/b448c21d2e71
  2. 你假笨的<<JVM源码分析之Metaspace解密>>:http://lovestblog.cn/blog/2016/10/29/metaspace/

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/86718434