flink运行报错,内存溢出,有人懂吗

flink运行一段时间,报内存溢出,下面是运行参数,和报错,设置了很大的taskmanager内存,还是不行,有没有人懂🙏🏻

img


flink run \
-t yarn-per-job \
-d \
-p 10 \
-Drest.flamegraph.enabled=true \
-Dyarn.application.queue=default \
-Drest.flamegraph.enabled=true \
-Djobmanager.memory.process.size=2048mb \
-Dtaskmanager.memory.process.size=49152mb \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dtaskmanager.memory.jvm-metaspace.size=512mb \
-Dtaskmanager.memory.jvm-overhead.max=2048mb \
-Dstate.backend.rocksdb.block.blocksize=64kb \
-Dstate.backend.rocksdb.block.cache-size=128mb \
-Dstate.backend.rocksdb.writebuffer.size=128mb \
-Dstate.backend.rocksdb.compaction.style=level \
-Dstate.backend.rocksdb.compaction.level.max-size-level-base=320m \
-Dstate.backend.rocksdb.writebuffer.count=5 \
-Dstate.backend.rocksdb.thread.num=8 \
-Dtaskmanager.memory.jvm-overhead.fraction=0.3  \
-Dstate.backend.rocksdb.checkpoint.transfer.thread.num=8 \
-Dstate.backend.rocksdb.writebuffer.number-to-merge=3 \
-Dstate.backend.rocksdb.metrics.block-cache-usage=true \
-Dstate.backend.rocksdb.memory.partitioned-index-filters=true \
-Dtaskmanager.memory.network.max=2048mb \
-Denv.java.opts="-Dfile.encoding=UTF-8" \
-Dyarn.application.name=beta_hunter_fault_matching \
-c cn.seres.beta.realtime.app.BetaHunterVehicleFaultMatchApp \
/root/beta_flink_lib/beta_hunter_fault_match-1.2-SNAPSHOT.jar
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 建议你看下这篇博客👉 :Flink的taskmanager到底设置多少内存为好
  • 除此之外, 这篇博客: Flink内核原理学习(四)内存模型中的 二、TaskManager内存模型 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      Flink 1.10 对 TaskManager 的内存模型和 Flink 应用程序的配置选项进行了重大更改,让用户能够更加严格地控制其内存开销jobmanager.memory.process.size: 1600m。这里就需要引出其内存模型。
    TM内存模型
    另外JobManager也是使用堆内存、堆外内存,并在1.11版本后与TM统一了配置


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

通过你的日志看,实际内存已经超过了 -Dtaskmanager.memory.process.size=49152mb 设置的大小,是不是你的窗口开窗时间太长了,导致计算数据量太大了?内存使用大小理论上和source的数据流入量成正比;你可以预估一下你的job时间窗口内计算的量有多大,再判断内存是否够用,这个只能慢慢调优了;