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的空间。
解决方法: