关注
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;
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的OC时间线 #
439813次浏览 3928人参与
# 总结:哪家公司面试体验感最差 #
40654次浏览 209人参与
# 平安产险科技中心求职汇总 #
243542次浏览 2606人参与
# 牛友故事会 #
590314次浏览 12479人参与
# 你知道哪些职场黑话? #
29522次浏览 243人参与
# 地方国企笔面经互助 #
21696次浏览 42人参与
# Keep实习校招 #
31753次浏览 228人参与
# 找工作时的取与舍 #
52314次浏览 356人参与
# 工作中的卑微时刻 #
7695次浏览 49人参与
# Offer比较,你最看重什么? #
150545次浏览 1037人参与
# 视觉/交互/设计招聘信息汇总 #
8503次浏览 571人参与
# 工作压力大怎么缓解 #
68188次浏览 897人参与
# 你的头发还好吗?一起爆改美发黑科技! #
74874次浏览 1107人参与
# 职场捅娄子大赛 #
263986次浏览 2379人参与
# 不考虑转正,实习多久合适 #
20974次浏览 105人参与
# 风评不好的公司,你会去吗? #
33233次浏览 174人参与
# 应届生初入职场,求建议 #
175391次浏览 2437人参与
# lastday知无不言 #
46974次浏览 422人参与
# 同bg的你秋招战况如何? #
145252次浏览 912人参与
# 市场营销人求职交流聚集地 #
104321次浏览 993人参与
# 招银网络求职进展汇总 #
101186次浏览 646人参与
# 蔚来开了,制造业的牛友投递了吗? #
22923次浏览 191人参与