0
点赞
收藏
分享

微信扫一扫

OOM排查和处理

八怪不姓丑 2022-01-20 阅读 55

1、OOM异常:java.lang.OutOfMemoryError: Java heap space

如果不配垃圾回收器,系统默认使用parallel scavenger和parallel old作为老年代垃圾回收器,

堆OOM的原因:

排查方案:

注意

解决方案:

2、OOM异常:java.lang.OutOfMemoryError: GC overhead limit exceeded

3、OOM异常:java.lang.OutOfMemoryError:unable to create new native thread

原因:

解决方案:

4、OOM异常:OutOfMemoryError: Direct buffer memory

jvm options是-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m。

创建直接内存大于5M会报错

ByteBufferbyteBuffer=ByteBuffer.*allocateDirect*(6*1024*1024);

5、OOM异常:java.lang.OutOfMemoryError: Metaspace

遇到metaspace的oom,在jdk1.8后,移除了永久代,换成了metaspace(元空间),首先得先说一句,就是metaspace也是在堆外,因此gc是无法管理的。

这次我在jvm options 加了oom时打印dump文件,接下来看看dump文件

metaspace用来存什么数据:
在方法区里面主要存放了类型的相关信息:如类名,访问修饰符,常量池,字段描述,方法描述等。

而经过cglib直接操作字节码运行时,则会生成大量的动态类,这些类就需要各自保存他们的方法描述,字段描述,类名等,从而占据了metaspace的空间。

解决方法:

更多文章和干货请关注公众号

举报

相关推荐

0 条评论