本文适用于 1.11 及以上版本,整理自 Flink 官网-配置 JobManager 内存。
非本地执行
内存模型(Memory Model)
配置选项(Configuration Options)
Overview
进程总内存(Total Process Memory)
jobmanager.memory.process.size = (none)
对于容器化部署模式(Containerized Deployment),这相当于申请的容器(Container)大小。
Flink 总内存(Total Flink Memory)
jobmanager.memory.flink.size = (none)
JVM Heap
JobManager 的 JVM 堆内存。
jobmanager.memory.heap.size = (none)
Off-Heap Memory
JobManager 的堆外内存。
jobmanager.memory.off-heap.size = 128 mb
JVM 元空间(JVM Metaspace)(Off-Heap)
Flink JVM 进程的 Metaspace。
jobmanager.memory.jvm-metaspace.size = 256 mb
JVM 开销(JVM Overhead)(Off-Heap)
用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。
jobmanager.memory.jvm-overhead.(min/max/fraction) = (192 mb/1 gb/0.1)
JVM 参数(JVM Parameters)
Flink 进程启动时,会根据配置的和自动推导出的各内存部分大小,也可以显式地设置以下 JVM 参数:
JVM 参数 | JobManager 取值 |
---|---|
-Xmx 和 -Xms | JVM 堆内存(JVM Heap) |
-XX:MaxDirectMemorySize | 堆外内存(Off-Heap Memory) |
-XX:MaxMetaspaceSize | JVM 元空间(JVM Metaspace) |
建议(recommend)
如果已经明确设置了 JVM 堆内存(jobmanager.memory.heap.size),建议不要再设置 进程总内存(jobmanager.memory.process.size) 或 Flink 总内存(jobmanager.memory.flink.size),否则可能会造成内存配置冲突。
如果遇到 JobManager 进程抛出 “OutOfMemoryError: Direct buffer memory” 的异常,可以尝试调大 堆外内存(jobmanager.memory.off-heap.size) 配置。
如果同时配置了 Flink 总内存(jobmanager.memory.flink.size) 和 JVM 堆内存(jobmanager.memory.heap.size),且没有配置 堆外内存(jobmanager.memory.off-heap.size),那么 堆外内存的大小 = Flink 总内存 - JVM 堆内存。 这种情况下,堆外内存 的默认大小将不会生效。
本地执行(Local Execution)
本地执行(Local Execution) 是指将 Flink 作为一个单独的 Java 程序运行在电脑本地而非创建一个集群(例如在 IDE 中)。
本地执行模式下不需要为 JobManager 进行内存配置,配置参数将不会生效。