性能问答>求助Metaspace OOM>
14回复

求助Metaspace OOM



Metaspace空间出现OOM,通过gclog发现,首次出现Metaspace FullGC的时候,不能把Metaspace空间给释放掉,导致随后出现OOM,但是再接着来几次FullGC是能把Metaspace空间给清理掉的,发现当Old区GC能释放掉比较大的空间时,Metaspace的FullGC就能释放掉空间,就有点纳闷,为啥第一次Metaspace空间GC时不能释放掉空间,后面才行,GC时Metaspace空间的释放和Old区有什么关系呢
gc.png

846 阅读
请先登录,再评论

将oom时的内存快照dump下来,使用MAT或者visualvm进行分析,看下是不是类重复加载或者加载的class过大,类加载器过多导致Metaspace碎片化严重,可以在启动的时候添加-XX:+TraceClassLoading -XX:+TraceClassUnloading这两个参数

19月前

5506.786: [Full GC (Metadata GC Threshold) [PSYoungGen: 31282K->0K(116224K)] [ParOldGen: 23842K->52677K(2796544K)] 55125K->52677K(2912768K), [Metaspace: 238233K->234355K(1280000K)], 0.1736108 secs] [Times: user=0.36 sys=0.04, real=0.18 secs]
5511.080: [GC (Metadata GC Threshold) [PSYoungGen: 40032K->4367K(117760K)] 92709K->57045K(2914304K), 0.0067853 secs] [Times: user=0.03 sys=0.01, real=0.01 secs]
5511.087: [Full GC (Metadata GC Threshold) [PSYoungGen: 4367K->0K(117760K)] [ParOldGen: 52677K->51867K(2796544K)] 57045K->51867K(2914304K), [Metaspace: 238239K->222762K(1280000K)], 0.1658022 secs] [Times: user=0.36 sys=0.03, real=0.16 secs]
5518.934: [GC (Allocation Failure) [PSYoungGen: 65536K->7210K(119808K)] 117403K->59077K(2916352K), 0.0068486 secs] [Times: user=0.03 sys=0.01, real=0.00 secs]
5524.710: [GC (Allocation Failure) [PSYoungGen: 72642K->7902K(120320K)] 124509K->59769K(2916864K), 0.0061940 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]
5526.837: [GC (Metadata GC Threshold) [PSYoungGen: 35435K->5601K(119808K)] 87303K->57476K(2916352K), 0.0070049 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
5526.844: [Full GC (Metadata GC Threshold) [PSYoungGen: 5601K->0K(119808K)] [ParOldGen: 51875K->53783K(2796544K)] 57476K->53783K(2916352K), [Metaspace: 238298K->238298K(1280000K)], 0.1443881 secs] [Times: user=0.36 sys=0.04, real=0.14 secs]
5526.988: [GC (Last ditch collection) [PSYoungGen: 0K->0K(120320K)] 53783K->53783K(2916864K), 0.0048802 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
5526.993: [Full GC (Last ditch collection) [PSYoungGen: 0K->0K(120320K)] [ParOldGen: 53783K->51177K(2796544K)] 53783K->51177K(2916864K), [Metaspace: 238298K->237094K(1280000K)], 0.1763401 secs] [Times: user=0.77 sys=0.03, real=0.17 secs]
5527.189: [GC (Metadata GC Threshold) [PSYoungGen: 154K->192K(119808K)] 51332K->51369K(2916352K), 0.0042145 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
5527.193: [Full GC (Metadata GC Threshold) [PSYoungGen: 192K->0K(119808K)] [ParOldGen: 51177K->29297K(2794496K)] 51369K->29297K(2914304K), [Metaspace: 237097K->109407K(1280000K)], 0.1378751 secs] [Times: user=0.32 sys=0.01, real=0.13 secs]

19月前
回复 鱼沙:

加载类的classload也需要回收,类才能卸载吗?

8月前回复
回复 手机用户1018249:

Metaspace中的类需要同时满足如下三个条件的类才会被卸载:
1.该类所有的实例都已经被回收;
2.加载该类的ClassLoader已经被回收;
3.该类对应的java.lang.Class对象没有任何地方被引用。
对照检查下看看

8月前回复
回复 手机用户1018249:

dump文件删除了吗?看不了

9月前回复
查看更多

上传不了图片,伤心

9月前
回复 小明明:

上传了gc log

9月前回复
回复 手机用户1018249:

你试试,可以上传的

9月前回复

gc.png

19月前