Flink内存模型

一、内存布局

1、直观图

2、树状图

 二、内存解释

1、Flink使用的内存

(1)JVM堆上内存

  说明:堆上内存管理序列化之后的数据,如果需要处理的数据超出了内存限制,则会将部分数据存储到硬盘上。堆上内存在写磁盘或网络传输时至少需要一次内存复制。

  a.框架堆上内存Framework Heap Memory

    Flink框架本身所使用的内存,即TaskManager本身所占用的堆上内存,不计入Slot资源中

配置参数:taskmanager.memory.framework.heap.size=128MB,默认值128MB

  b.Task堆上内存Task Heap Memory

    Task执行用户代码时所使用的堆上内存

配置参数:taskmanager.memory.task.heap.size

(2)JVM堆外内存

  说明:使用堆外内存,可以将大量的数据保存在堆外,极大地减小堆内存,避免GC和内存溢出的问题。堆外内存在写磁盘或网络传输时是零拷贝。堆外内存是进程间共享的。即使JVM进程奔溃也不会丢失数据。堆上内存的使用、监控、调式简单,堆外内存出现问题后的诊断则较为复杂

  a.框架堆外内存Framework Off-Heap Memory

    Flink框架本身所使用的内存,即TaskManager本身所占用的堆外内存,不计入Slot资源。

配置参数:taskmanager.memory.framework.off-heap.size=128MB,默认值128MB

  b.Task堆外内存Task Off-heap Memory

    Task执行用户代码时所使用的堆外内存

配置参数:taskmanager.memory.task.off-heap.size=0,默认值为0

  c.网络缓冲内存Network Memory

    网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区(Network Buffter)

配置参数:taskmanager.memory.network.[64/1024/0.1](min/max/fraction),默认min=64MB,max=1GB,fraction=0.1

  d.堆外托管内存Managed Memory

    Flink管理的堆外内存

配置参数:taskmanager.memory.managed.[size|fraction],默认值fraction=0.4

2、JVM本身使用的内存

(1)JVM元空间

  JVM元空间所使用的内存

配置参数:taskmanager.memory.jvm-metaspace=96m,默认值96MB

(2)JVM执行开销

  JVM在执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。

配置参数:taskmanager.memory.jvm-overhead=[min/max/fraction],默认min=192MB,max=1GB,fraction=01

3、总体内存

 (1)Flink使用内存

  Flink使用的内存包括Flink使用的堆上、堆外内存。

配置参数:taskmanager.memory.flink.size

(2)进程使用内存

  整个进程所使用的内存,包括Flink使用的内存和JVM使用的内存。

配置参数:taskmanager.memory.process.size

  JVM内存控制参数:

JVM堆上内存,使用-Xmx和-Xms控制
JVM直接内存,使用-XX:MaxDirectMemory控制。对于托管内存的,使用Unsafe.allocateMemory()申请,不受该参数控制
JVM Metaspace使用-XX:MaxMetaspaceSize控制

 

posted @ 2022-10-15 10:48  宜家数据小哥  阅读(726)  评论(2编辑  收藏  举报