flink使用中内存的使用情况
flink内存划分方式
组成部分 | 配置参数 | 描述 |
用于 Flink 框架的 JVM 堆内存(进阶配置)。 | ||
用于 Flink 应用的算子及用户代码的 JVM 堆内存。 | ||
taskmanager.memory.managed.sizetaskmanager.memory.managed.fraction | 由 Flink 管理的用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。 | |
用于 Flink 框架的堆外内存(直接内存或本地内存)(进阶配置)。 | ||
用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)。 | ||
网络内存(Network Memory) | taskmanager.memory.network.mintaskmanager.memory.network.max | |
Flink JVM 进程的 Metaspace。 | ||
JVM 开销 | taskmanager.memory.jvm-overhead.mintaskmanager.memory.jvm-overhead.max |
flink内存的计算
- 如果taskmanager 内存设置成4个G,计算各个模块的内存分布
- 首次计算JVM开销。
- jvm metaspace的大小是固定的256M。
- jvm 执行开销,fraction 为0.1,(min,max)为(192M,1G)。4G*0.1=409M,在192和1G之间,所以可以执行。
- 再计算flink内存。
- 4G- 409M = 3430M。
- 然后计算网络缓存内存和托管内存。
- 网络缓冲内存(fraction 0.1,min 64M,max 1G),3430*0.1 = 343M 在min max之间,所有网络缓冲内存为343M。
- 托管内存fraction 为0.4 ,所以3430*0.4 = 1372 M。
- 计算框架堆上内存和堆外内存。
- 框架堆上和堆外内存默认都是128M,所以总共是256M
- 计算task内存
- task堆外内存默认是0M,task内存等于flink内存-框架内存-托管内存-网络内存(3430-128-128-343-1372=1492M)
- 计算堆内存
- 框架堆内存+task内存=128+1459=1587M
- 计算直接内存
- task内存+框架内存+网络内存=0+128+343=471M