https://blog.csdn.net/qq_20042935/article/details/123740947
总进程内存 = Flink使用内存 + JVM特定内存
Flink使用内存 = 框架堆内和堆外内存 + task堆内和堆外内存 + 网络缓冲内存 + 托管内存
JVM特定内存
JVM metaspace
taskmanager.memory.jvm-metaspace.size,默认 256mb
JVM over-head 执行开销
JVM 执行时自身所需要的内容,包括栈空间、垃圾回收空间
taskmanager.memory.jvm-overhead.fraction,默认 0.1
taskmanager.memory.jvm-overhead.min,默认 192mb
taskmanager.memory.jvm-overhead.max,默认 1gb
框架内存
即taskManager本身占用的内存,不计入slot的资源中
堆内:taskmanager.memory.framework.heap.size,默认 128MB
堆外:taskmanager.memory.framework.off-heap.size,默认 128MB
task内存
taskmanager执行用户代码时 所使用的内存
堆内:taskmanager.memory.task.heap.size,默认 none,由【Flink使用内存】扣除掉其他部分的内存得到。
堆外:taskmanager.memory.task.off-heap.size,默认 0,表示不使用堆外内存
网络缓冲内存
网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区
堆外:taskmanager.memory.network.fraction,默认 0.1
taskmanager.memory.network.min,默认 64mb
taskmanager.memory.network.max,默认 1gb
托管内存
用于 RocksDB State 的本地内存和 排序、哈希表、缓存中间结果。
堆外:taskmanager.memory.managed.fraction,默认 0.4
taskmanager.memory.managed.size,默认 Flink使用内存*fraction,默认
案例
yarn模式下 指定的是总进程内存:taskmanager.memory.process.size = 4G
则 每部分内存为:
- JVM metaspace:256M
- JVM 执行开销:4G * 0.1=409M
- 网络缓冲内存:3430.4M * 0.1 = 343.04M
- 托管内存:3430.4M * 0.4 = 1372.16M
- 框架内存:堆内和堆外都是128M
- task内存:堆外内存0M、堆内内存 = 3430.4 - 128 - 128 -343.04 -1372.16 = 1459.2M

