spark程序运行异常:java.lang.OutOfMemoryError: GC overhead limit exceeded

博客分析了在集群上运行Spark程序时遇到的`java.lang.OutOfMemoryError: GC overhead limit exceeded`异常。异常原因是经过多次垃圾回收后,仍无法释放足够的内存,导致程序终止。文章提到了可能的原因,包括代码问题和Hive元数据内存不足,并提供了相应的解决策略,如调整JVM参数、代码优化、生成堆内存快照进行分析以及通过日志定位问题。最终,通过删除Hive表的部分分区解决了这个问题。
摘要由CSDN通过智能技术生成

此次异常是在集群上运行的spark程序日志中发现的。由于这个异常导致sparkcontext被终止,以致于任务失败:
在这里插入图片描述

出现的一些原因

参考:GC overhead limit exceeded

java.lang.OutOfMemoryError有几种分类的,这次碰到的是java.lang.OutOfMemoryError: GC overhead limit exceeded,下面就来说说这种类型的内存溢出。
简单来说,java.lang.OutOfMemoryError: GC overhead limit exceeded发生的原因是,当前已经没有可用内存,经过多次GC之后仍然没能有效释放内存。
众所周知,JVM的GC过程会因为STW,只不过停顿短到不容易感知。当引起停顿时间的98%都是在进行GC,但是结果只能得到小于2%的堆内存恢复时,就会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded这个错误。Plumbr给出一个示意图:
GC
这个错误其实就是空闲内存与GC之间平衡的一个限制,当经过几次GC之后,只有少于2%的内存被释放,也就是很少的空闲内存,可能会再次被快速填充࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值