请教下,我使用的flink k8s application模式部署,之前用flink1.13.6_java8跑一个任务,没什么问题,现在升级为1.17.0_java11,反而会出现大量的oomkill,导致TM反复重启,我查的说这个跟jvm overhead区域超用有关,我Tm总内存给了10g,jvm_overhead给到了3g,问题仍然存在?
Flink 1.13 到 1.17 版本间经历了多个重大更新,包括对内存管理模型的改进,特别是 Java 11 相比于 Java 8 在内存使用上可能有所不同,可能导致原有配置不再适用。
几个可能的解决方向:
JVM Overhead 调整:虽然你已经尝试调整了 jvm_overhead 参数,但可能仍需进一步微调。Flink 1.13 到 1.17 版本升级过程中,内存模型可能发生了变化,包括如何计算 JVM Overhead。确保你按照最新的官方文档调整这些参数,并理解它们是如何影响总体内存分配的。
GC 调优:Java 11 默认使用的是 G1 垃圾收集器,而之前版本可能默认是 Parallel GC 或 CMS。G1 垃圾收集器的行为和内存管理策略与旧的收集器有所不同,可能需要针对你的应用进行特定的 GC 调优。例如,可以通过设置 -XX:+UseG1GC 和 -XX:MaxGCPauseMillis 等参数来优化垃圾回收策略。
堆外内存:Flink 使用的内存不仅仅是堆内存,还包括堆外内存(如用于网络缓冲区、排序等)。确保你考虑到了所有类型的内存使用,并不是简单地调整 JVM 堆大小就能解决的。检查是否有大量数据序列化、反序列化或者 shuffle 操作导致的内存激增。
Flink 配置检查:确认是否有新的配置选项或者默认配置在新版本中发生了变化,这些变化可能会影响到内存管理。查看 Flink 的官方文档和发行说明,了解是否有需要手动调整的配置项。最佳方案还是,获取并分析堆栈跟踪,确定是哪部分代码导致的内存溢出,这有助于针对性地解决问题 ,此回答整理自钉群“【②群】Apache Flink China社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。