记录一次元空间OOM

2022/06/06 java

很少有实际遇到OOM的机会,java.lang.OutOfMemoryError: Metaspace


背景

我们的系统抛出了一个元空间OOM异常 java.lang.OutOfMemoryError: Metaspace

image-20220606163008604

排查思路

首先,我们看一下运行参数中是否限制了元空间的大小

-XX:MaxMetaspaceSize=256m

image-20220606164209249

什么是MetaspaceSize 和 MaxMetaspaceSize

  • Metaspace是元空间初始大小

  • MaxMetaspaceSize是元空间最大大小,默认无限制(取决于本地内存),超出此值会抛出OOM异常

从JDK1.8开始,彻底废弃了永久代(PermGen)的概念,取而代之的是Metaspace:元空间

Metaspace使用的是本地内存而不是堆内内存,用来存放Java类在JVM中的信息,也包括一些运行时数据

具体可以参考这篇文章,很详细:深入理解堆外内存 Metaspace

捞一个正常运行的线上机器,Metaspace已使用大小为295MB

image-20220606165218453