当前位置:   article > 正文

Flink 内存管理_note this accounts for all memory usage within the

note this accounts for all memory usage within the taskmanager process, incl

一、内存分布图

JobManager 比较简单, 主要介绍一下 TaskManager。
在这里插入图片描述

在这里插入图片描述
部分配置文件 flink-conf.yaml

jobmanager.rpc.address: bigdata1

# The RPC port where the JobManager is reachable.

jobmanager.rpc.port: 6123


# The total process memory size for the JobManager.
#
# Note this accounts for all memory usage within the JobManager process, including JVM metaspace and other overhead.

jobmanager.memory.process.size: 2048m


# The total process memory size for the TaskManager.
#
# Note this accounts for all memory usage within the TaskManager process, including JVM metaspace and other overhead.

taskmanager.memory.process.size: 14g # ⭐️⭐️⭐️
# taskmanager.memory.task.heap.size: 10g
taskmanager.memory.managed.size: 1g
# To exclude JVM metaspace and overhead, please, use total Flink memory size instead of 'taskmanager.memory.process.size'.
# It is not recommended to set both 'taskmanager.memory.process.size' and Flink memory.
#
# taskmanager.memory.flink.size: 1280m

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.

taskmanager.numberOfTaskSlots: 3

# The parallelism used for programs that did not specify and other parallelism.

parallelism.default: 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

二、参数调整

① taskmanager.memory.framework.heap.size=128MB
② (Total Flink Memory)(Framework Heap)(Managed Memory)(Task off-heap memory)(Network Memory) 
		= (14GB) - (256MB) - (128GB) - (1GB) - (1GB) = 10.5GB
③ taskmanager.memory.managed.size =128MB
		默认: taskmanager.memory.managed.fraction=0.4
		Total Flink Memory × fraction = (14GB-256MB-1GB) × 0.4 =  5.10GB
④ taskmanager.memory.framework.off-heap.size =128MB
⑤ 
⑥ Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB  --> 1GB
		taskmanager.memory.network.min:默认为64MB
		taskmanager.memory.network.max:默认为1gb
		taskmanager.memory.network.fraction:默认为0.1
⑦ taskmanager.memory.jvm-metaspace.size = 256MB
⑧ Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB  --> 1GB
		taskmanager.memory.jvm-overhead.min:默认为192MB,
		taskmanager.memory.jvm-overhead.max:默认为1GB
		taskmanager.memory.jvm-overhead.fraction:默认为0.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

三、具体用途

① Framework Heap

Framework Heap 其实是为 Task Executor 本身所配置的堆内存大小,Task Executor 本身也是一个 Java 进程。
Framework Heap 是 Flink 框架保留的,是不会用来执行 Task 的。该堆的大小由 taskmanager.memory.framework.heap.size 参数控制,它的运行所需资源比较轻量级,默认为128M。

② Task Heap

Task Heap Memory 是专门用于执行 Flink 任务的堆内存空间。该堆的大小由taskmanager.memory.task.heap.size参数指定。这个参数的默认为:
(Total Flink Memory) – (Framework Heap)– (Managed Memory) – (Task off-heap memory) – (Network Memory)

③ Managed Memory

Managed Memory 是由 Flink 直接管理的 off-heap 内存,它主要用于排序、哈希表、中间结果缓存、RocksDB的backend。其实它是Task Executor管理的off-heap内存。它可以由taskmanager.memory.managed.size 参数直接配置指定,默认是不配置的。默认是通过
taskmanager.memory.managed.fraction配置的因子(默认0.4)来设置Managed off-heap memory,默认为 Total Flink Memory 的 40% 。

如果不设置 taskmanager.memory.managed.size , 则 Managed Memory 计算如下:

taskmanager.memory.managed.size =128MB
默认: taskmanager.memory.managed.fraction=0.4
Total Flink Memory × fraction = (14GB-256MB-1GB) × 0.4 =  5.10GB
  • 1
  • 2
  • 3

在这里插入图片描述

④ Framework Off-Heap

Task Executor 保留的 off-heap memory ,不会分配给任何slot。可以通过taskmanager.memory.framework.off-heap.size参数指定,默认为128M。Framework 所保留的内存,一般是不建议调整的。

⑤ Task Off-Heap

Task Executor执行的Task所使用的堆外内存。如果在Flink应用的代码中调用了Native的方法,需要用到off-heap内存,这些内存会分配到Off-heap堆外内存中。可以通过指定taskmanager.memory.task.off-heap.size来配置,默认为0。如果代码中需要调用Native Method并分配堆外内存,可以指定该参数。一般不使用,所以大多数时候可以保持0。

⑥ Network Memory

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

taskmanager.memory.network.min:默认为64MB
taskmanager.memory.network.max:默认为1gb
taskmanager.memory.network.fraction:默认为0.1

Network Memory 有两种配置方式,

  • 一种是通过 taskmanager.memory.network.fraction 参数,也就是Total Flink Memory的百分比,默认为Total Flink Meory 的10%。
  • 还有一种是通过 taskmanager.memory.network.mintaskmanager.memory.network.max指定 shuffle 缓存在 min, max 之间的内存空间。如果使用fraction计算出来的Network Meory超出min-max的范围,那么以min-max为准。如果配置的min和max是一样的值,就使用固定的内存大小。

以上面图示的例子:当前的Total Flink Meory为:(14Gb-256MB) ,而 taskmanager.memory.network.fraction为0.1,min为64MB,max为1GB,所以好Network Meory 大于 max ,所以最 max ,为 1GB。
计算公式如下:
Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB --> 1GB

⑦ JVM Metaspace

从JDK 8开始,JVM把永久代拿掉了。类的一些元数据放在叫做Metaspace的Native Memory中。在Flink中的JVM Metaspace Memory也一样,它配置的是Task Manager JVM的元空间内存大小。通过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:默认为0.1。

参考文献:

参考文献:
https://blog.csdn.net/ChinaPoison/article/details/112163548
https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/deployment/config.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/696358
推荐阅读
相关标签
  

闽ICP备14008679号