flink使用中内存的使用情况


flink内存划分方式

flink slot的内存大小_flink

组成部分  

  配置参数  

  描述  

框架堆内存(Framework Heap Memory)

taskmanager.memory.framework.heap.size

用于 Flink 框架的 JVM 堆内存(进阶配置)。

任务堆内存(Task Heap Memory)

taskmanager.memory.task.heap.size

用于 Flink 应用的算子及用户代码的 JVM 堆内存。

托管内存(Managed memory)

taskmanager.memory.managed.sizetaskmanager.memory.managed.fraction

由 Flink 管理的用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。

框架堆外内存(Framework Off-heap Memory)

taskmanager.memory.framework.off-heap.size

用于 Flink 框架的堆外内存(直接内存或本地内存)(进阶配置)。

任务堆外内存(Task Off-heap Memory)

taskmanager.memory.task.off-heap.size

用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)

网络内存(Network Memory)

taskmanager.memory.network.mintaskmanager.memory.network.max

taskmanager.memory.network.fraction

用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存受限的等比内存部分

JVM Metaspace

taskmanager.memory.jvm-metaspace.size

Flink JVM 进程的 Metaspace。

JVM 开销

taskmanager.memory.jvm-overhead.mintaskmanager.memory.jvm-overhead.max

taskmanager.memory.jvm-overhead.fraction

用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存部分

flink内存的计算

  • 如果taskmanager 内存设置成4个G,计算各个模块的内存分布
  1. 首次计算JVM开销。
  1. jvm metaspace的大小是固定的256M。
  2. jvm 执行开销,fraction 为0.1,(min,max)为(192M,1G)。4G*0.1=409M,在192和1G之间,所以可以执行。
  1. 再计算flink内存。
  1. 4G- 409M = 3430M。
  1. 然后计算网络缓存内存和托管内存。
  1. 网络缓冲内存(fraction 0.1,min 64M,max 1G),3430*0.1 = 343M 在min max之间,所有网络缓冲内存为343M。
  2. 托管内存fraction 为0.4 ,所以3430*0.4 = 1372 M。
  1. 计算框架堆上内存和堆外内存。
  1. 框架堆上和堆外内存默认都是128M,所以总共是256M
  1. 计算task内存
  1. task堆外内存默认是0M,task内存等于flink内存-框架内存-托管内存-网络内存(3430-128-128-343-1372=1492M)
  1. 计算堆内存
  1. 框架堆内存+task内存=128+1459=1587M
  1. 计算直接内存
  1. task内存+框架内存+网络内存=0+128+343=471M