Flink 内存模型

Jobmanage内存模型

1G 1C 的配置

上图不够直观,用户大脑无法第一反应出内存构成。

Total Process Memory = JVM堆内存 + JVM堆外内存(堆外内存+ JVM元空间 +JVM自身运行内存)

Total Flink Memory = JVM堆内存 + 堆外内存

参数控制:

Total Process Memory 对应 jobmanager.memory.process.size 。

Total Flink Memory 对应 jobmanager.memory.flink.size 。

Off-Heap Memory 堆外内存 对应 jobmanager.memory.off-heap.size 默认128mb。

JVM Metaspace 对应 jobmanager.memory.jvm-metaspace.size 默认256mb 。

JVM Overhead 用于 JVM 开销的本地内存,例如栈空间、垃圾回收空间等

  • jobmanager.memory.jvm-overhead.fraction:默认值 0.1(Total Process Memory的0.1)

  • jobmanager.memory.jvm-overhead.min:默认值192mb。

  • jobmanager.memory.jvm-overhead.max:默认值1gb。

1G内存,1024*0.1 = 102.4 <192. 所以默认192mb.

Total Process Memory = JVM堆内存 + JVM堆外内存(堆外内存+ JVM元空间 +JVM自身运行内存)

1024M = ? + 128M +256M + 192M

所以 jvm heap 的大小为 448M。

Taskmanage 内存模型

  搞明白内存配置,默认配置及比例

  生产环境内存如何配置

    什么场景配置什么样的配置?

Total Flink Memory = JVM heap + Management Memory + Direct Meomory

Total Flink Memory = (①Framework Heap + ②Task Heap)

+ ③ Management Memory

+ (④ Framework Off-Heap +⑤Task Off-Heap + ⑥ Network)

Total Process Memory = Total Flink Memory + ⑦JVM Metaspace + ⑧JVM Overhead

进程内存3部分,flink总内存+ 元空间+ JVM运营内存。

Flink内存6部分,JVM内分F T heap;

JVM 外分 管理内存和直接内存 ;

直接内存分 网络内存和堆外FT off-heap;

参数控制:

Total Process Memory 对应 taskmanager.memory.process.size 。

Total Flink Memory 对应

包括6部分

① Framework heap 对应 taskmanager.memory.framework.heap.size 默认为128m

为Task Executor本身所配置的堆内存大小,因为Task Executor本身也是一个Java。Framework Heap是Flink框架保留的,是不会用来执行Task的。

②Task Heap 对应 taskmanager.memory.task.heap.size

默认为:

Total Flink Memory– Framework Heap -Framework Off-Heap – Managed Memory– Task off-heap memory – Network Memory

③Management Memory 对应 taskmanager.memory.managed.fraction 默认0.4 (Total Flink Memory的0.4)

纯堆外内存,由MemoryManager管理,用于中间结果缓存、排序、哈希表等,以及RocksDB状态后端。可见,RocksDB消耗的内存可以由用户显式控制了,不再像旧版本一样难以预测和调节。

④Framework Off-heap 对应 taskmanager.memory.framework.off-heap.size 默认为128M

为 Task Executor保留的off-heap memory,不会分配给任何slot。

⑤task Off-heap 对应 taskmanager.memory.task.off-heap.size来配置,默认为0。

为Task Executor执行的Task所使用的堆外内存。如果在Flink应用的代码中调用了Native的方法,需要用到off-heap内存,这些内存会分配到Off-heap堆外内存中。可以通过指定如果代码中需要调用Native Method并分配堆外内存,一般不使用。

⑥Network 对应

在Task与Task之间进行数据交换时(shuffle),需要将数据缓存下来,缓存能够使用的内存大小就是这个Network Memory。它由是三个参数决定:

  • taskmanager.memory.network.min:默认为64MB

  • taskmanager.memory.network.max:默认为1gb

  • taskmanager.memory.network.fraction:默认为0.1

Network Memory有两种配置方式

1、通过taskmanager.memory.network.fraction参数,默认为Total Flink Meory的10%。

2、通过taskmanager.memory.network.min和taskmanager.memory.network.max指定shuffle缓存在min-max之间的内存空间。如果使用fraction计算出来的Network Meory超出min-max的范围,那么以min-max为准。如果配置的min和max是一样的值,就使用固定的内存大小。

JVM Metaspace 对应 taskmanager.memory.jvm-metaspace.size ,默认为256MB

JVM Overhead 保留给JVM其他的内存开销。例如:Thread Stack、code cache、GC回收空间等等。和Network Memory的配置方法类似,由三个配置决定:

  • taskmanager.memory.jvm-overhead.min:默认为192MB,

  • taskmanager.memory.jvm-overhead.max:默认为1GB

  • taskmanager.memory.jvm-overhead.fraction:默认为Total Process Memory 的0.1。

注意:Flink官方也建议我们不要同时配置taskmanager.memory.process.size和taskmanager.memory.process.size。

实战: tm 1c 1G 配置 参数

taskmanager.memory.process.size=1024M

taskmanager.memory.managed.fraction=0.01

taskmanager.memory.network.fraction=0.01

taskmanager.memory.jvm-metaspace.size=128m

taskmanager.memory.framework.off-heap.size=128m

taskmanager.memory.jvm-overhead.fraction=0.1

taskmanager.memory.jvm-overhead.min=128m

上图的值由下往上解释:

1 、JVM overhead 1024*0.1=102.4 <128 所以JVM overhead = 128M

2、Jvm metaspace指定了jvm metaspace的参数为128,所以看到界面为128M

3、Network的64怎么来的呢,(1024-128-128)*0.01 = 7.68 < taskmanager.memory.network.min=64(默认值)

4、Task Off-heap 始终为0

5、Framework.off-heap 128 指定了具体参数 128。

6、Managed memory 7.68 指定了因子为0.01 (1024-128-128)*0.01 = 7.68。

7、Framework-heap 默认值为128,参数中没指定所以为128M。

所以task heap = 1024 - 128 -128 -64 - 0 - 128 - 7.68 -128 = 440.32

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值