MAPREDUCE服务 MRS-Flink性能调优建议:内存总体调优

时间:2024-06-17 09:21:36

内存总体调优

Flink内部对内存进行了划分,整体上划分成为了堆内存和堆外内存两部分。Java堆内存是通过Java程序创建时指定的,这也是JVM可自动GC的部分内存。堆外内存可细分为可被JVM管理的和不可被JVM管理的,可被JVM管理的有Managed Memory、Direct Memory,这部分是调优的重点,不可被JVM管理的有JVM Metaspace、JVM Overhead,这部分是native memory。

图1 内存
表2 相关参数

参数

配置

注释

说明

Total Memory

taskmanager.memory.flink.size: none

总体Flink管理的内存大小,没有默认值,不包含Metaspace和Overhead,Standalone模式时设置。

整体内存。

taskmanager.memory.process.size: none

整个Flink进程使用的内存大小,容器模式时设置。

FrameWork

taskmanager.memory.framework.heap.size: 128mb

runtime占用的heap的大小,一般来说不用修改,占用空间相对固定。

RUNTIME底层占用的内存,一般不用做较大改变。

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

runtime占用的off-heap的大小,一般来说不用修改,占用空间相对固定。

Task

taskmanager.memory.task.heap.size:none

没有默认值,flink.size减去框架、托管、网络等得到。

算子逻辑,用户代码(如UDF)正常对象占用内存的地方。

taskmanager.memory.task.off-heap.size:0

默认值为0,task使用的off heap内存。

Managed Memory

taskmanager.memory.managed.fraction: 0.4

托管内存占taskmanager.memory.flink.size的比例,默认0.4。

managed内存用于中间结果缓存、排序、哈希等(批计算),以及RocksDB state backend(流计算),该内存在批模式下一开始就申请固定大小内存,而流模式下会按需申请。

taskmanager.memory.managed.size: 0

托管内存大小,一般不指定,默认为0,内存大小由上面计算出来。若指定了则覆盖比例计算的内存。

Network

taskmanager.memory.network.min:64mb

网络缓存的最小值。

用于taskmanager之间shuffle、广播以及与network buffer。

taskmanager.memory.network.max:1gb

网络缓存的最大值。(MRS 3.3.1及之后版本无需修改该值,默认值已为Long#MAX_VALUE)

taskmanager.memory.network.fraction:0.1

network memory占用taskmanager.memory.flink.size的大小,默认0.1,会被限制在network.min和network.max之间。

用于taskmanager之间shuffle、广播以及与network buffer。

Others

taskmanager.memory.jvm-metaspace.size:256M

metaspace空间的最大值,默认值256MB。

用户自己管理的内存。

taskmanager.memory.jvm-overhead.min:192M

jvm额外开销的最小值,默认192MB。

taskmanager.memory.jvm-overhead.max:1G

jvm额外开销的最大值,默认1GB。

taskmanager.memory.jvm-overhead.fraction:0.1

jvm额外开销占taskmanager.memory.process.size的比例,默认0.1,算出来后会被限制在jvm-overhead.min和jvm-overhead.max之间。

3.3.1及之后版本无需修改taskmanager.memory.network.max网络缓存的最大值

support.huaweicloud.com/devg-rule-mrs/mrs_07_450173.html