flink-cdc 从数据库插入hudi表一万多条数据的过程中报错了 “内存不足错误:超过GC开销限制 OutOfMemoryError: GC overhead limit exceeded” 明明我有32G内存,也不够吗,是不是要设置什么?
这个错误提示表明你的JVM进程使用的GC时间过多,且在一定时间内无法完成垃圾回收。有几种方式来解决这个问题:
增加JVM的堆内存大小,可以通过设置JVM的-Xmx参数来调整。但是需要注意,JVM堆内存调整的不当可能导致内存溢出等问题。
调整JVM的GC策略,可以通过设置JVM的-Xlog:gc
参数来输出GC日志,以便分析程序的GC情况,并根据分析结果调整GC策略。
优化程序的代码,减少程序的内存占用。可以通过对程序进行代码审查和优化,删除无用的代码,避免过多的对象创建等方式来减少程序的内存使用。
不过在Flink的场景下效果并不是很好,建议使用Hudi的bulkInsert方式批量插入数据,以减少内存占用。
这个错误是因为JVM在进行GC时,发现大部分时间都在GC上,而实际上回收的内存很少,超过了GC开销限制。这个问题通常是由于内存不足或者程序存在内存泄漏导致的。在你的情况下,32G的内存应该足够了,可能是程序存在内存泄漏或者需要调整JVM的参数来优化GC。你可以尝试以下几个方案:
调整JVM参数,增加堆内存大小,例如:-Xmx32g -Xms32g。
检查程序是否存在内存泄漏,可以使用一些内存分析工具来查找。
调整GC策略,例如使用G1GC,可以在JVM参数中加入:-XX:+UseG1GC。
如果你的程序是使用Java8编写的,可以升级到Java11或更高版本,因为Java11及以上版本中的GC性能有所提升。
总之,需要根据具体情况来进行调整,建议先尝试调整JVM参数和GC策略,如果问题仍然存在,可以使用内存分析工具来查找问题所在。
主要是因为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算法。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。