flink使用中内存的使用情况
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.size
taskmanager.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.min
taskmanager.memory.network.max
taskmanager.memory.network.fraction用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存的受限的等比内存部分。 JVM Metaspace taskmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。 JVM 开销 taskmanager.memory.jvm-overhead.min
taskmanager.memory.jvm-overhead.max
taskmanager.memory.jvm-overhead.fraction用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存的受限的等比内存部分。
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
- 首次计算JVM开销。