概览
Since 1.10 TM 做了重大更新。
Since 1.11 JM 内存模型做了重大更新。
本文主要讲解 TM 内存模型。
官网链接 https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/memory/mem_setup_tm/
Total process Memory
先理解一下官网的这张图
total process memory(tpm) = total flink memory(tfm) + jvm memory
tfm = JVM heap + Off-Heap Momory
Off-Heap Momory = Managed Memory + Driect Memory
配置 Flink 进程内存最简单的方法是指定以下两个配置项中的任意一个:
配置参数:
|-----------------------------------------------------------------------------------|
|配置项 |TaskManager 配置参数 |JobManager 配置参数 |
|Flink 总内存 |taskmanager.memory.flink.size |jobmanager.memory.flink.size |
|进程总内存 |taskmanager.memory.process.size |jobmanager.memory.process.size |
|-----------------------------------------------------------------------------------|
Detail & Config
//TODO
JVM params
JVM 参数 | TaskManager 取值 | JobManager 取值 |
---|---|---|
-Xmx 和 -Xms | 框架堆内存 + 任务堆内存 | JVM 堆内存 (*) |
-XX:MaxDirectMemorySize(TaskManager 始终设置,JobManager 见注释) | 框架堆外内存 + 任务堆外内存(**) + 网络内存 | 堆外内存 (**) (**) |
-XX:MaxMetaspaceSize | JVM Metaspace | JVM Metaspace |
(*) 请记住,根据所使用的 GC 算法,你可能无法使用到全部堆内存。一些 GC 算法会为它们自身分配一定量的堆内存。这会导致堆的指标返回一个不同的最大值。 | ||
(**) 请注意,堆外内存也包括了用户代码使用的本地内存(非直接内存)。 | ||
(***) 只有在 jobmanager.memory.enable-jvm-direct-memory-limit 设置为 true 时,JobManager 才会设置 JVM 直接内存限制。 |