0 前言
flink 我在工作中用的还挺多的,如何做好flink 内存管理是挺重要的 将之前研究的笔记做一下总结和汇总
1 内存总体结构
我们点到
org.apache.flink.runtime.util.config.memory.FlinkMemory 这个接口类中可以看的比较清楚 flink 的内存结构
在org.apache.flink.runtime.util.config.memory.taskmanager.TaskExecutorFlinkMemory中
Flink使用内存=框架堆内和堆外内存+ Task堆内和堆外内存 + 网络缓冲内存 + 管理内存
1 各个内存块
⚫ JVM Heap:JVM 堆上内存
1、Framework Heap Memory:Flink 框架本身使用的内存,即 TaskManager 本身所 占用的堆上内存,不计入 Slot 的资源中。 占用的堆上内存,不计入 Slot 的资源中。 配置参数:taskmanager.memory.framework.heap.size=128MB,默认 128MB
2、Task Heap Memory:Task 执行用户代码时所使用的堆上内存。 配置参数:taskmanager.memory.task.heap.size
⚫ Off-Heap Mempry:JVM 堆外内存
1、DirectMemory:JVM 直接内存
1 Framework Off-Heap Memory:Flink框架本身所使用的内存,即TaskManager 本身所占用的对外内存,不计入 Slot 资源
配置参数:taskmanager.memory.framework.off-heap.size=128MB,默认 128MB
2 Task Off-Heap Memory:Task 执行用户代码所使用的对外内存。 配置参数:taskmanager.memory.task.off-heap.size=0,默认 0
3 Network Memory:网络数据交换所使用的堆外内存大小,如网络数据交换 缓冲区
2 Managed Memory:Flink 管理的堆外内存,用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。 配置参数: taskmanager.memory.managed.fraction=0.4 taskmanager.memory.managed.size
2 JobManager 内存分配
3 TaskManager 内存分配
未完待续