核心内容摘要
granite-4.0-h-350m部署教程:Ollama镜像免配置+多语言对话功能详解
JobManager 的内存结构比 TaskManager 简单但更敏感JobManager 进程的核心内存组件就 4 个JVM Heapjobmanager.memory.heap.sizeJobManager 的 Java 堆Flink 框架和“少量用户代码”会用到。
Off-heap Memoryjobmanager.memory.off-heap.size覆盖所有 off-heap 使用direct native比如网络通信库、依赖组件、以及提交/回调阶段可能触发的用户逻辑。
JVM Metaspacejobmanager.memory.jvm-metaspace.size类元数据空间。
JVM Overheadmin/max/fraction 三件套jobmanager.memory.jvm-overhead.{min,max,fraction}线程栈、code cache、GC 额外空间等 JVM 原生开销这是“容器 OOMKilled”的常见原因之一。
配置主路线优先“总进程内存”需要时再下钻JobManager 最省心的方式是配置总进程内存总量思路和 TaskManager 类似其余由 Flink 推导。
尤其在 K8s/YARN 这种容器/资源受控环境里这样更不容易“算错账”。
如果你决定做精细化控制建议遵守这个原则你显式配了jobmanager.memory.heap.sizeHeap后就尽量别再同时配 total process / total flink因为很容易出现“推导结果冲突”导致启动失败或部署失败。
JVM Heap什么时候该加加多少由什么决定jobmanager.memory.heap.size控制 JobManager 的堆主要用于Flink 框架本身调度、Web UI、元数据、ExecutionGraph、状态跟踪等作业提交阶段可能执行的用户代码例如某些 batch source 的分析/枚举Checkpoint completion callbacks 中的用户逻辑如果你在回调里做了比较重的事情Heap 的需求通常由这些因素驱动同时运行的job 数量越多越吃每个 job 的DAG 复杂度算子多、链路复杂、并行度高ExecutionGraph 更大提交/回调阶段是否做了重逻辑/大对象处理典型信号JobManager 报OutOfMemoryError: Java heap spaceWeb UI / REST 响应变慢甚至 RM/Dispatcher 频繁重启看日志和 GC
Off-heapDirect buffer OOM 的第一落点jobmanager.memory.off-heap.size覆盖 JobManager 所有 off-heapdirect/native消耗。
典型来源Flink 框架依赖比如网络通信栈作业提交阶段触发的用户逻辑例如批作业 source 的某些实现Checkpoint completion callbacks 里的用户逻辑尤其是用了 native/direct 的库如果你遇到OutOfMemoryError: Direct buffer memory优先考虑1确认是不是 JobManager 侧直接爆的日志里明确2适当调大jobmanager.memory.off-heap.size可选增强开启 JobManager 的 DirectMemory 上限jobmanager.memory.enable-jvm-direct-memory-limit开启后Flink 会把-XX:MaxDirectMemorySize设置为 Off-heap 大小。
什么时候建议开你想把 direct 内存“圈”在一个明确上限里防止无界膨胀把容器顶爆你已经在排查 direct OOM希望更可控地复现与定位什么时候不急着开你还没搞清楚 off-heap 的主要消耗来源先把 heap/off-heap/overhead 的总账配稳更重要
JVM OverheadJobManager 在容器里“莫名其妙被杀”的幕后黑手Overhead 是 native 预留区线程栈、code cache、GC 空间等。
在容器环境里Overhead 留太少经常导致没有明显 Java heap OOM但是 Pod 直接 OOMKilled / 进程被系统杀这时通常不是 heap 不够而是线程多RPC、REST、心跳、web、调度线程池code cache / JIT / GC 额外空间不足依赖引入 native 消耗所以生产里要确保overhead 的推导结果落在合理的 min/max 范围内不要把 process memory 配到“刚刚好等于 heap off-heap”要给 overhead 留余量
本地模式IDE 启动提醒JobManager 内存配置会被忽略如果你是在 IDE 里直接跑本地不建集群JobManager 的这些内存配置选项不会生效。
这时你要控制 JobManager 的实际堆大小只能靠 JVM 启动参数-Xmx/-Xms或 IDE 的 Run/VM options。