核心内容摘要
B站免费好剧云集:无需会员,这些真人电视剧让你看到停不下来!
先搞清两个“总量”概念Total Flink Memory vs Total Process MemoryFlink JVM 进程的总进程内存Total Process Memory包含两部分Total Flink MemoryFlink 应用实际可用的内存JVM Heap Off-heap/Direct/Native 等JVM 自身开销比如 Metaspace、JVM Overhead 等你最常用的两组开关就是TaskManagertaskmanager.memory.flink.sizeTotal Flink Memorytaskmanager.memory.process.sizeTotal Process MemoryJobManagerjobmanager.memory.flink.sizeTotal Flink Memoryjobmanager.memory.process.sizeTotal Process Memory其余组件会在默认值或你额外配置的基础上自动推导。
(nightlies.apache.org)怎么选更合适Standalone/物理机/VM更常用*.memory.flink.size你声明“给 Flink 本体多少内存”。
(nightlies.apache.org)Kubernetes / YARN 容器化更常用*.memory.process.size它更贴近“容器申请/限制的大小”。
(nightlies.apache.org)
必须三选一不配就启动失败很多人第一次就卡在这里除本地执行外Flink 要求你至少显式配置下面三种方式中的一种否则会直接启动失败 (nightlies.apache.org)方式 A配置 Total Flink Memorytaskmanager.memory.flink.size/jobmanager.memory.flink.size方式 B配置 Total Process Memorytaskmanager.memory.process.size/jobmanager.memory.process.size方式 C配置关键内部组件更细粒度风险也更高TaskManagertaskmanager.memory.task.heap.sizetaskmanager.memory.managed.sizeJobManagerjobmanager.memory.heap.size注意不推荐同时显式配置 Total Process Memory 和 Total Flink Memory很容易产生冲突导致部署失败。
(nightlies.apache.org)
你配的这些值最终会怎么落到 JVM 参数上Flink 启动进程时会根据你的配置或推导结果显式添加关键 JVM 参数-Xmx/-XmsTaskManagerFramework Task HeapJobManagerJVM Heap-XX:MaxDirectMemorySizeTaskManagerFramework Task Off-heap Network MemoryJobManager只有在开启jobmanager.memory.enable-jvm-direct-memory-limit时才会加 Direct memory 限制-XX:MaxMetaspaceSize两者都是 JVM Metaspace这解释了两个常见现象TaskManager Direct buffer OOM通常和 MaxDirectMemorySize以及网络内存/Off-heap有关JobManager 是否限制 Direct memory取决于那个 enable 开关 (nightlies.apache.org)
“按比例 min/max 夹逼”的两类组件JVM Overhead Network MemoryFlink 里有些组件既可以按比例从“总量”里切也受 min/max 约束超出范围就启动失败JVM Overhead可以是 Total Process Memory 的一个 fraction同时受 min/max 限制Network MemoryTaskManager 才有通常可作为 Total Flink Memory 的 fraction也受 min/max 限制 (nightlies.apache.org)理解这个规则很关键你不显式配组件大小时Flink 会按 fraction 算再用 min/max 夹逼到合法范围你把 minmax相当于把该组件“钉死”为固定值如果你把总量和其他组件都配得太死fraction 可能被忽略Overhead/Network 变成“剩余值”剩余值仍必须落在 min/max 内否则同样启动失败 (nightlies.apache.org)
两套落地模板Standalone 与 K8s/YARN 的“更稳”写法下面给你两种“少踩坑”的思路示例值可按你集群资源与作业特性替换。
模板 AStandalone更推荐从 Total Flink Memory 入手# flink-conf.yamljobmanager.memory.flink.size:2048mtaskmanager.memory.flink.size:8192m# 其余Managed/Network/JVM Overhead 等先让 Flink 推导# 真遇到 Direct buffer OOM / 网络缓冲不足再针对性调 Network/Off-heap适用你更关心“Flink 本体能用多少”而不是容器边界。
(nightlies.apache.org)模板 BKubernetes / YARN更推荐从 Total Process Memory 对齐容器# flink-conf.yamljobmanager.memory.process.size:3072mtaskmanager.memory.process.size:10240m# 建议如果你对网络/overhead 很敏感可再加 min/max 来防止推导过小或过大# 但不要一上来就把所有组件都钉死容易冲突适用你希望 Flink 进程内存与容器 request/limit 一致避免 “Container Memory Exceeded”。
(nightlies.apache.org)
常见报错怎么对症下药比“盲调 -Xmx”更有效Flink 官方把内存相关问题也按症状拆开了你可以按下面思路快速定位 (nightlies.apache.org)IllegalConfigurationException通常是值非法负数、fraction1或配置冲突总量/组件互相打架。
优先检查异常里提到的组件对应的配置项。
(nightlies.apache.org)OutOfMemoryError: Java heap space说明 Heap 太小提高 total memory或直接提高 TaskManager task heap / JobManager heap。
(nightlies.apache.org)OutOfMemoryError: Direct buffer memoryDirect memory 限制太小或有 direct memory 泄漏/未计入。
重点检查 Off-heap/Network 的配置与 Flink 设置的 JVM 参数。
(nightlies.apache.org)容器超限Container Memory Exceeded优先用*.memory.process.size对齐容器边界并给 JVM Overhead 留足空间。
(nightlies.apache.org)