开发者社区 > 云原生 > 正文

flink-cdc 从数据库插入hudi表一万多条数据的过程中报错了,是不是要设置什么?

flink-cdc 从数据库插入hudi表一万多条数据的过程中报错了 “内存不足错误:超过GC开销限制 OutOfMemoryError: GC overhead limit exceeded” 明明我有32G内存,也不够吗,是不是要设置什么?

展开
收起
滴滴滴~ 2023-03-20 17:08:58 521 0
4 条回答
写回答
取消 提交回答
  • 试试把数据刷出去的时间缩小,条数缩小。此答案整理自钉群“Flink CDC 社区”

    2023-03-21 16:24:05
    赞同 展开评论 打赏
  • 坚持这件事孤独又漫长。

    这个错误提示表明你的JVM进程使用的GC时间过多,且在一定时间内无法完成垃圾回收。有几种方式来解决这个问题:

    • 增加JVM的堆内存大小,可以通过设置JVM的-Xmx参数来调整。但是需要注意,JVM堆内存调整的不当可能导致内存溢出等问题。

    • 调整JVM的GC策略,可以通过设置JVM的-Xlog:gc参数来输出GC日志,以便分析程序的GC情况,并根据分析结果调整GC策略。

    • 优化程序的代码,减少程序的内存占用。可以通过对程序进行代码审查和优化,删除无用的代码,避免过多的对象创建等方式来减少程序的内存使用。

    不过在Flink的场景下效果并不是很好,建议使用Hudi的bulkInsert方式批量插入数据,以减少内存占用。

    2023-03-21 11:40:47
    赞同 展开评论 打赏
  • 这个错误是因为JVM在进行GC时,发现大部分时间都在GC上,而实际上回收的内存很少,超过了GC开销限制。这个问题通常是由于内存不足或者程序存在内存泄漏导致的。在你的情况下,32G的内存应该足够了,可能是程序存在内存泄漏或者需要调整JVM的参数来优化GC。你可以尝试以下几个方案:

    1. 调整JVM参数,增加堆内存大小,例如:-Xmx32g -Xms32g。

    2. 检查程序是否存在内存泄漏,可以使用一些内存分析工具来查找。

    3. 调整GC策略,例如使用G1GC,可以在JVM参数中加入:-XX:+UseG1GC。

    4. 如果你的程序是使用Java8编写的,可以升级到Java11或更高版本,因为Java11及以上版本中的GC性能有所提升。

    总之,需要根据具体情况来进行调整,建议先尝试调整JVM参数和GC策略,如果问题仍然存在,可以使用内存分析工具来查找问题所在。

    2023-03-21 08:39:06
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    主要是因为JVM堆内存设置不合理或应用程序占用了太多的内存而导致的。

    1.增加JVM堆内存大小,设置为16G

    flink run -m yarn-cluster -yn 3 -yjm 2048 -ytm 16384 -d -c com.example.MyApplication my-app.jar -Xmx16g
    

    2.调整GC参数 可以尝试增加年轻代大小或调整GC算法。

    2023-03-20 17:52:09
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载