关注
74.发生了OOM,应该怎么去分析解决:
1、Java heap space
当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError:Javaheap space 错误(根据实际生产经验,可以对程序日志中的 OutOfMemoryError 配置关键字告警,一经发现,立即处理)。
原因分析
Javaheap space 错误产生的常见原因可以分为以下几类:
1、请求创建一个超大对象,通常是一个大数组。
2、超出预期的访问量/数据量,通常是上游系统请求流量飙升,常见于各类促销/秒杀活动,可以结合业务流量指标排查是否有尖状峰值。
3、过度使用终结器(Finalizer),该对象没有立即被 GC。
4、内存泄漏(Memory Leak),大量对象引用没有释放,JVM 无法对其自动回收,常见于使用了 File 等资源没有回收。
解决方案
针对大部分情况,通常只需要通过 -Xmx 参数调高 JVM 堆内存空间即可。如果仍然没有解决,可以参考以下情况做进一步处理:
1、如果是超大对象,可以检查其合理性,比如是否一次性查询了数据库全部结果,而没有做结果数限制。
2、如果是业务峰值压力,可以考虑添加机器资源,或者做限流降级。
3、如果是内存泄漏,需要找到持有的对象,修改代码设计,比如关闭没有释放的连接。
2、GC overhead limit exceeded
当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 java.lang.OutOfMemoryError:GC overhead limit exceeded 错误。简单地说,就是应用程序已经基本耗尽了所有可用内存, GC 也无法回收。
此类问题的原因与解决方案跟 Javaheap space 非常类似,可以参考上文。
3、Permgen space
该错误表示永久代(Permanent Generation)已用满,通常是因为加载的 class 数目太多或体积太大。
原因分析
永久代存储对象主要包括以下几类:
1、加载/缓存到内存中的 class 定义,包括类的名称,字段,方法和字节码;
2、常量池;
3、对象数组/类型数组所关联的 class;
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
12-08 15:35
浙江大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
14684次浏览 174人参与
# 上班到公司第一件事做什么? #
109377次浏览 740人参与
# 你今年做了几份实习? #
9776次浏览 145人参与
# 工作两年想退休了 #
203426次浏览 1799人参与
# 你开始找寒假实习了吗? #
15898次浏览 210人参与
# 新凯来求职进展汇总 #
64127次浏览 171人参与
# 影石Insta360求职进展汇总 #
166505次浏览 1335人参与
# 大厂面试初体验 #
83630次浏览 385人参与
# 0经验如何找实习? #
27047次浏览 456人参与
# 面试尴尬现场 #
205404次浏览 821人参与
# 大学最后一个寒假,我想…… #
72260次浏览 726人参与
# 25届秋招公司红黑榜 #
306651次浏览 1252人参与
# 什么样的公司千万别去 #
28026次浏览 148人参与
# 大家每天通勤多久? #
64497次浏览 415人参与
# 金融财经春招备战日记 #
43896次浏览 216人参与
# 央国企投递记录 #
166052次浏览 1622人参与
# 你找工作经历过哪些骗局? #
9730次浏览 144人参与
# 机械人值得去的半导体企业 #
32983次浏览 183人参与
# 字节出了豆包coding模型 #
6874次浏览 61人参与
# 一起聊华为 #
168560次浏览 820人参与