JVM出现了OOM异常如何解决

1.异常出现位置

堆溢出、永久代/元空间溢出、方法栈溢出

2.堆溢出

java.lang.OutOfMemory : Java heap space
原因:
1.代码中可能存在大对象分配
2.可能存在内存泄漏,多次GC之后,还是无法找到一块足够大的内存容纳当前对象

解决方法:
1.检查是否存在大对象的分配,最有可能是大数组的分配
2.通过jmap命令,把堆内存dump下来,使用mat工具分析一下,检查是否存在内存泄漏问题
3.如果没有找到明显的内存泄漏,使用-Xmx加大堆内存
4.检查是否有大量的自定义的Finalizable对象

3.永久代/元空间溢出

java.lang.OutOfMemoryError: PermGen spacejava.lang.OutOfMemoryError: Metaspace
原因:
永生代是HotSpot虚拟机对方法区的具体实现,存放了被虚拟机加载的类信息、常量、静态变量、JIT编译后的代码
解决方法:
1.JDK之前,频繁的错误使用String.intern()方法
2.运行期间生成了大量的代理类,导致方法区被撑爆,无法卸载
3.应用长时间运行,没有重启

解决方法:
1.检查永生代空间或者元空间是否设置过小
2.检查代码中是否存在大量反射操作
3.dump之后通过mat检查是否生成了大量由反射生成的代理类
4.重启JVM

4.方法栈溢出

Java.lang.OutOfMemoryError:unable to create new native Thread
原因:创建了大量的线程导致的
解决方法:
1.通过-Xss降低每个线程大小的容量
2.线程总数也受到系统空闲内存和操作系统的限制,检查是否该系统有限制

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值