Flink资源与内存模型占用空间计算方式。

Posted 青冬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink资源与内存模型占用空间计算方式。相关的知识,希望对你有一定的参考价值。

Flink 第1章 Flink资源与内存模型


资源配置调优

开发了一些程序,那么怎么评估这些程序所需要的资源配比这些呢?
比如使用标准的Flink任务提交脚本 Generic CLI模式(通用客户端模型)

从1.11开始,增加了通用的客户端模型 使用-D指定kv变量(这里演示以1.13.2为准)。

bin/flink run \\ 
-t yarn-per-job \\ 
-d \\
-p 5\\   # 执行并行度
-Dyarn.application.queue=test \\ # 指定yarn队列
-Djobmanager.memory.preocess.size=1024mb \\ # 指定JM总进程的内存
-Dtaskmanager.memory.process.size=1024mb \\ #指定每个TM的总进程大小
-Dtaskmanage.numberOfTaskSlots=2 \\ #指定每个TM的slot数
-c com.huangyichun.flink.Demo \\ #指定运行类
./flink-test-1.0.jar  #指定jar包


内存设置

在Flink1.10之后,对内存模型有很大的改动,变为以下图示:

两大部分,堆内存和堆外内存。


内存模型详解

JVM 特定内存

JVM本身需要使用到的内存,比如JVM的metaspace和over-head

JVM metaspace 元空间

taskmanager.memort.jvm-metaspace.size 256mb

JVM over-head 执行开销

JVM执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。有个OOM不就是 over-head

taskmanage.memory.jvm-overhead.fraction 0.1
taskmanage.memory.jvm-overhead.min 192mb
taskmanage.memory.jvm-overhead.max 1gb


Flink 框架内存

Flink框架,即TaskManager本身所占用的内存,不计入Slot的资源中。
分为两部分,堆内的和堆外的。

堆内

taskmanager.memory.framework.heap.size 128mb

堆外

taskmanager.memory.framework.off-heap.size 128mb


Task内存

Task 执行用户代码时所使用的的内存,也分为堆内和堆外。

堆内

taskmanager.memory.task.heap.size none
扣除其他部分的内存,剩余的

堆外

taskmanage.memory.task.off-heap.size 0
不适用堆外内存


网络内存

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

网络内存

taskmanager.memory.network.fraction 0.1
这里注意并不是总内存的0.1,而是扣除JVM特定内存的0.1
taskmanager.memory.network.min 64mb
taskmanager.memory.nerwork.max 1gb


托管内存

托管内存,只要使用了RocksDB State Backend的本地内存和批的排序、哈希表、缓存中间结果就会占用这部分内存。

托管内存

taskmanager.memory.managed.fraction 0.4
taskmanager.memory.managed.size none
size为空则等于Flink内存*0.4

内存使用实例

比如程序直接提交到Yarn上去,设置了

taskmanager.memory.process.size 进程的总内存 = 4G。

那么从下往上开始计算。

JVM 执行开销

192mb<=4G*0.1<=1gb,那么就占用0.4G。

JVM 元空间

固定0.2G

Flink的内存

4G-0.4G-256mb =3.4G

管理内存

3.4G*0.4 = 1.36G

网络缓冲区

364mb<=3.4*0.1<=1gb,占用0.34G

Flink框架堆内对外

0.1G*2 = 0.2G

Task堆外

默认为0

Task堆内

4 − 0.4 − 0.2 − 1.36 − 0.34 − 0.2 − 0 = 1.5 G 4 - 0.4 -0.2 -1.36 - 0.34 -0.2 -0 =1.5 G 40.40.21.360.340.20=1.5G
(页面上可能有一点点偏差,为显示问题)

以上是关于Flink资源与内存模型占用空间计算方式。的主要内容,如果未能解决你的问题,请参考以下文章

Flink内存设置思路

模型在分布式数据并行的情况下占用两倍的内存空间

Flink安装部署

Unity音频资源小结

Unity音频资源小结

内存扩充的覆盖与交换以及内存空间的分配和回收的连续分配管理方式