jvm MetaSpace内存溢出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm MetaSpace内存溢出相关的知识,希望对你有一定的参考价值。

参考技术A 最近为了方便监控系统的一个调用链路情况,所以在测试环境引入了公司的skywalking组件。
引入方式也比较简单,就是在jvm参数里面增加:

随后我基本上将所有的服务都加好了,但是其中有一个服务每次加了以后,过几秒钟就内存溢出,打印出了dump堆栈。一还原就好了。

1.拿到了堆栈信息后,我首先就是用MAT看一下堆的信息

看了一下堆信息,这个是很正常的,因为我的老年代的设置的是2G,远远没有达到。所以继续观察他的gc日志情况。

这里就发现了大量的Full GC,并且是Metadata相关的,那么Metadata是属于存放类的加载、常量等的信息的地方。

应该是skywalking底层是使用的字节码技术创建了类的,而且刚好这个服务在启动的时候,有一个定时任务大量的触发skywalking去创建类。然后这些临时的类信息放在MetaSpace里,由于还没来得及回收,就塞满了,导致触发gc,但这个时候都还在被引用着。所以最终导致MetaSpace OOM

我们设置的128M,然后我调大改成了512M,问题就解决了。同时对于这种创建通过反射去处理的逻辑平时也需要考虑元空间的溢出

以上是关于jvm MetaSpace内存溢出的主要内容,如果未能解决你的问题,请参考以下文章

JVM 发生内存溢出的 8 种原因及解决办法

Java内存溢出(OOM)分析

性能分析 | JVM发生内存溢出的8种原因及解决办法

#yyds干货盘点# Java 内存分析之堆内存和MetaSpace内存

JVM 内存布局

内存溢出和内存泄漏