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

image.png