通过Skywalking查看JVM发现频繁FullGC,但是服务没down,也没有抛出内存溢出异常
手动生成dump文件,并使用VisualVm分析,发现堆大小并没有很大,只有300多M
再查看gc日志,发现元数据区达到gc阈值(默认21M),从而频繁FullGC,因为java8元数据区是本地内存,且没有配置元数据区最大内存,所以元数据区大小一直在增长
最后,配置一下元数据区jvm参数
初始大小 -XX:MetaspaceSize=128M
最大大小-XX:MaxMetaspaceSize=512M
运行一段时间,未出现频繁FullGC现象