很少有实际遇到OOM的机会,java.lang.OutOfMemoryError: Metaspace
背景
我们的系统抛出了一个元空间OOM异常 java.lang.OutOfMemoryError: Metaspace
排查思路
首先,我们看一下运行参数中是否限制了元空间的大小
-XX:MaxMetaspaceSize=256m
什么是MetaspaceSize 和 MaxMetaspaceSize
Metaspace
是元空间初始大小
MaxMetaspaceSize
是元空间最大大小,默认无限制(取决于本地内存),超出此值会抛出OOM异常从JDK1.8开始,彻底废弃了永久代(PermGen)的概念,取而代之的是
Metaspace
:元空间
Metaspace
使用的是本地内存而不是堆内内存,用来存放Java类在JVM中的信息,也包括一些运行时数据具体可以参考这篇文章,很详细:深入理解堆外内存 Metaspace
捞一个正常运行的线上机器,Metaspace已使用大小为295MB