0%

Flink JobManager 内存模型

本文适用于 1.11 及以上版本,整理自 Flink 官网-配置 JobManager 内存

非本地执行

内存模型(Memory Model)

process_mem_model

配置选项(Configuration Options)

Overview

Overview

进程总内存(Total Process Memory)

jobmanager.memory.process.size = (none)

对于容器化部署模式(Containerized Deployment),这相当于申请的容器(Container)大小。

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 进行内存配置,配置参数将不会生效。


欢迎关注我的其它发布渠道