首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

记录一次MetaSpace OOM问题排查历程

随后查看监控发现 cpu飙升 image.png 然后此台应用挂掉 问题定位 1、日志提醒 metaspace oom,并且频繁出现 image.png 2、查看JVM metaspace: metaspace...空间大小一直在256M附近 (线上JVM的metaspace配置参数:-XX:MaxMetaspaceSize=256m) image.png 3、拉长日期查看:04月14日开始metaspace开始上涨...而classloader数量较多,会占用较多的metaspace,且影响回收效率....参考资料: 大量类加载器创建导致诡异 FullGC metaspace内存结构 image.png 3、测试环境压测复现: 复现时遇到的问题: - 大部分部分接口压测不会出现metaspace...oom - 部分接口压测会出现metaspace oom,出现oom接口的特点:返回类型为void image.png image.png 本地基于jmeter压测测试环境机器,然后使用jconsole

2.1K20

Metaspace内存不足导致FGC问题排查

事件回顾 清楚的记得是2020/7/25 14:34分左右,周六的下午,我还在公司苦逼的加班中,突然钉钉告警群里出现大量应用OP的dubbo超时调用、空指针异常,异常中间还有Metaspace元空间不足等异常...driver trace writer to file fail,ex:[{}] java.lang.RuntimeException: by java.lang.ClassFormatError: Metaspace...2.png 上面我们大概可以判断出来,是由于Metaspace元空间不足,出现内存溢出,导致jvm频繁触发full GC,为了保证业务正常,此时我们让运维紧急重启了服务器,通过重启服务器,业务逐渐恢复正常...Klass Metaspace,由参数-XX:CompressedClassSpaceSize进行控制,JDK8的时候 Klass Metaspace默认是1G。...发现Proxy类被org.springframework.boot.loader.LaunchedURLClassLoader强引用,导致生成的Proxy类无法被卸载一直残留在MetaSpace区造成内存泄漏

3.3K20

java fgc_java Metaspace频繁FGC问题定位

FGC时显示Metaspace的空间差不多又1.2G,[Metaspace: 297366K->297366K(1284096K)]?...还有一个区间是Klass Metaspace,由参数-XX:CompressedClassSpaceSize进行控制,具体的内容大家可以参考寒泉子的JVM源码分析之Metaspace解密文章。...,看起来好像Metaspace并没有被回收,其实这是JVM的一个BUG,我们alijdk将这个问题进行了修复,能看到前后是有变化的,所以如果大家在排查Metaspace的问题时候,希望不要被这个信息骗到...但是问题依然存在,因为下一次开始的时候Metaspace空间GC前的还是很大,第一次GC为[Metaspace: 297370K->297370K(1284096K)], 0.9347004 secs...CCSC表示的是Klass Metaspace的已经被commit的内存大小,单位也是KB CCSU表示Klass Metaspace的已经被使用的内存大小 M & CCS M表示的是Klass Metaspace

57420

Java8内存模型—永久代(PermGen)和元空间(Metaspace)

这里之所以采用 JDK 1.7,是因为在 JDK 1.8 中, HotSpot 已经没有 “PermGen space”这个区间了,取而代之是一个叫做 Metaspace(元空间) 的东西。...下面我们就来看看 Metaspace 与 PermGen space 的区别。 三、Metaspace(元空间)   其实,移除永久代的工作从JDK1.7就开始了。...除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:   -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集...  -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集 现在我们在 JDK 8下重新运行一下代码段 4,不过这次不再指定

31100

jvm系列(十一):Java 8-从持久代到metaspace

Metaspace:一个新的内存空间诞生了 JDK8 HotSpot JVM现在使用了本地内存来存储类元数据,被称为Metaspace,和Oracle JRockit以及IBM JVM类似。...6、Metaspace 监控 • Metaspace 的使用可以通过HotSpot 1.8的详细的GC日志输出观察到。...Metaspace运行时比较 为了能更好的理解新的metaspace内存空间在运行时的行为,我们创建了一个会发生元数据泄露的java程序。你可以从这里下载。...这或许可以说明,一种好的调整metaspace扩容的策略有可能避免本地内存的浪费。 和用JDK1.7运行一样,我们指定了metaspace最大容量为128M,但它在我们程序里并不能完成5万次的迭代。...关于metaspace的总结 目前观察到的结果完全说明了合适的监控和调优是非常必要的,目的是为了尽量避免类似我们最后一种测试场景中过多的metaspace GC或者OOM触发的问题。

1.2K60

Java8内存模型—永久代(PermGen)和元空间(Metaspace)

这里之所以采用 JDK 1.7,是因为在 JDK 1.8 中, HotSpot 已经没有 “PermGen space”这个区间了,取而代之是一个叫做 Metaspace(元空间) 的东西。...下面我们就来看看 Metaspace 与 PermGen space 的区别。 三、Metaspace(元空间) 其实,移除永久代的工作从JDK1.7就开始了。...除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性: -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集...-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集 现在我们在 JDK 8下重新运行一下代码段 4,不过这次不再指定

1.2K20

Java8内存模型—永久代(PermGen)和元空间(Metaspace)

这里之所以采用 JDK 1.7,是因为在 JDK 1.8 中, HotSpot 已经没有 “PermGen space”这个区间了,取而代之是一个叫做 Metaspace(元空间) 的东西。...下面我们就来看看 Metaspace 与 PermGen space 的区别。 三、Metaspace(元空间)   其实,移除永久代的工作从JDK1.7就开始了。...除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:   -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集...  -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集 现在我们在 JDK 8下重新运行一下代码段 4,不过这次不再指定

47520

记一次OOM引发的线上事故

在压测的过程中在终端使用反复使用jcmd [PID] GC.heap_info命令, 重点观察Metaspace 区域数据变化 可以看到Metaspace中committed在飙升 排查与解决 使用...我们知道Java 8使用Metaspace来存贮类的元数据以及类加载器,Metaspace占用的是本地堆内存(native heap),所以Metaspace的增长导致了本地内存“撑爆”了。...可以通过-XX:MaxMetaspaceSize来设置触发Metaspace回收的阈值, 保证Metaspace不会太大,超过阈值就FullGC。但是这治标不治本,为什么会有这么多类加载器呢?...总结 Java 8开始彻底移除PermGen, 引入Metaspace来解决java.lang.OutOfMemoryError: PermGen。...但是不代表对Metaspace可以不管不问了,使用不当Metaspace会导致本地内存溢出的情况。也有JVM大神就觉得Metaspace取代perm的好处不是那么明显,有点费力不讨好的感觉。

18630

双12压测引出的线上Full GC排查

可以看到原因是超过了Metadata GC的阈值,触发了Full GC,Metaspace从243M 回收到231M,基本没怎么回收掉,所以稍微再来点量,很容易再次触发Metaspace 的回收。...Metaspace使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。...问题排查 刚开始看到 Full GC频繁,查看日志是由于Metaspace 空间不够造成的,第一反应是调整Metaspace 大小,把MetaspaceSize 从256M提高到了512M。...但是发现Metaspace引发的Full GC还是没有消除。 ?...发现内存缓慢增长,GC回收不掉,dump GC日志,查看是否有类被重复加载; Metaspace调优,比如我们现在生产环境 Metaspace 基本会设置256M 或者512M,可以根据应用的类型和机器内存配置来决定

2.1K20

JVM(五)

} } 首先是写好的代码编译成class文件 执行java命令 jVM加载你写的类 main线程执行方法 局部变量进入虚拟机栈 堆内存创建对象 如上几步,能发生OOM地方 metaspace...如何触发内存溢出呢 我们用下面参数设置Metaspace内存大小 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m 固定512M,当Metaspace满了之后...,就会触发FULL GC,回收的条件也比较苛刻,如这个类加载器被回收,这个类的所有对象实例都被回收等等,所以一旦Metaspace满了,未必会回收里面的很多类,一旦回收之后,还是有很多存活的类,如果继续想...Metaspace加入更多的类信息,就会导致OOM 导致Metaspace的一般原因如下 Metaspace的值太小,只有几十MB,(一般系统512MB)当对于一个稍微大型的系统,由于他有许多的类信心...,就可能导致Metaspace不够用 有很多系统用cgLIB之类的技术动态生成一些类,一旦代码没有控制住,就会创建过多的类,容易把Metaspace给塞满,进而引发内存溢出 虚拟机栈溢出 我们知道一个线程的虚拟机栈的内存大小是固定的

24740
领券