当前位置: 首页 > news >正文

GC overhead limit exceeded---Java 虚拟机 (JVM) 在进行垃圾回收内存量非常少解决

背景:

        我正在跑一个数据处理较为复杂的程序。然后调试了很多遍,出现了GC问题,如下图bug.        

        GC overhead limit exceeded-这个bug错误通常表示 Java 虚拟机 (JVM) 在进行垃圾回收时花费了过多的时间,并且回收的内存量非常少。这通常是由于内存不足或数据量过大导致的,如下图,我自己跑的程序出现错误。

尝试以下解决方案

1. 增加 Executor 内存

增加 Spark Executor 的内存在创建 SparkSes,sion 时设置 spark.executor.memory 参数:

val spark = SparkSession.builder() 
.appName("xxxxx") 
.config("spark.executor.memory", "20g") 
.config("spark.kryoserializer.buffer.max", "512m") 
.config("spark.serializer", "org.20apache.spark.serializer.KryoSerializer") 
.getOrCreate()

2. 增加 Driver 内存

增加 Driver 的内存:

val spark = SparkSession.builder() .appName("xxxxx") 
.config("spark.driver.memory", "8g") 
.config("spark.executor.memory", "20g") 
.config("spark.kryoserializer.buffer.max", "512m") 
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
.getOrCreate()

3. 调整分区数量

增加数据的分区数量可以帮助分散数据处理的负担,从而减少每个分区的内存消耗。

使用 repartition()coalesce() 方法来调整 DataFrame 的分区:

val numPartitions = 200 // 我差不多几十个G数据, 
val repartitionedDF = userInfoDF.repartition(numPartitions)

4. 调整 Spark 配置参数

调整以下 Spark 配置参数:

  .config("spark.memory.fraction", "0.7") // 调整内存比例
  .config("spark.memory.storageFraction", "0.5") // 调整存储比例

基本就这几种方案,一个一个试出来的,然后解决了,遇事不决调整资源,然后调整比例。最重要的是内存!!内存,还是TMD内存!!!

非常完美!

相关文章:

  • 【机器人】复现 GrainGrasp 精细指导的灵巧手抓取
  • Android开发检查是否是各大厂商手机的工具类
  • Redis 服务搭建
  • Spring MVC的请求和响应
  • JavaScript 函数基础
  • IoTDB看门狗配置后不生效
  • 算法 | 小龙虾优化算法原理,引言,公式,算法改进综述,应用场景及matlab完整代码
  • ISIS-2 邻居建立关系
  • 4.1 C#获取目录的3个方法的区别
  • 【考研政治】2026考研政治马原部分关键词带背 导论
  • Mysql基本查询(上)
  • 情绪分析和深度强化学习确实能够在一定程度上增强股市预测
  • 实战-MySQL5.7升级8.0遇到的四个问题
  • 解决安卓so库异常无法打印堆栈的问题
  • 网络拓扑图
  • 区块链驱动金融第九章——解锁比特币 “平台” 的多元潜力
  • vue中ts引入组件,无法找到模块xxx的声明文件。xxx隐式拥有 “any“ 类型。
  • HTTP长连接与短连接的前世今生
  • 【商城实战(63)】配送区域与运费设置全解析
  • Python字典
  • 专访|导演王沐:希望听障家庭的声响被更多人听到
  • 时隔5个月,辽沈银行行长再调整
  • 欧洲观察室|“美国优先”使欧盟对华政策面临地缘经济困境
  • 深一度|上座率连创纪录撬动文旅,中超可否复制大连模式
  • 1至4月国家铁路发送货物12.99亿吨,同比增长3.6%
  • 玉林一河段出现十年最大洪水,一村民被冲走遇难