Flink 性能优化总结(内存配置篇)

本文详细解释了Flink内存模型,包括堆上内存与堆外内存的区别,以及JVM内存、框架内存、网络内存和托管内存的作用。针对优化前的问题,如堆内存分配不合理和资源浪费,文章提供了优化后的参数配置建议,旨在提高性能并避免内存溢出。
摘要由CSDN通过智能技术生成

内存配置优化

Flink 内存模型

在这里插入图片描述

内存模型详解

进程内存(Total Process Memory):Flink 进程内存分为堆上内存和堆外内存,堆上内存和
堆外内存的主要区别在于它们的管理方式不同和使用方式不同,这些会影响到它们的性能和使用场景。
(1)JVM Heap(堆上内存):由 JVM 进行管理和分配的内存空间,可以快速的分配和释放内存,具有更好的内存管理和垃圾回收机制(JVM 垃圾回收机制)。
(2)OFF-Heap Memory(堆外内存):由操作系统进行管理和分配的内存空间,能够存储更大的数据和缓存,提供更好的性能和扩展性,堆外内存的使用的管理是要手动编码实现,相对于堆上内存更加复杂和容易出错。
JVM 内存: JVM 内存包括 JVM Mataspace(JVM 元空间)和 JVM OverHead(JVM 执行开销)
(1)JVM Mataspace(JVM 元空间):用于存放 class 文件中的类和方法等信息。
(2)JVM OverHead(JVM 执行开销):JVM 执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。
框架内存:框架内存即 TaskManager 本身占用的内存,包括 Framework Heap(框架堆上
内存)和 Framework Off-Heap(框架堆外内存),不计入 slot 资源。
网络内存:NetWork(网络内存)即网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区。
托管内存:Managed Memory(托管内存)用于 Flink 中状态的缓存存储。
Task 内存:Task 内存分为 Task Heap(Task 堆上内存)和 Task Off-Heap(Task 堆外内存),这部分内存用于执行用户代码。

内存配置详解

JVM Mataspace(JVM 元空间):
在这里插入图片描述
JVM OverHead(JVM 执行开销):
在这里插入图片描述
JVM 执行开销计算方式:
执行开销 = 进程内存 * fraction。此计算结果必须落在[192m, 1g]区间内,超过此区间则取边界值。
框架内存:
在这里插入图片描述
Managed Memory(托管内存):
在这里插入图片描述
如果 taskmanager.memory.managed.size 未指定则使用总进程大小 * fraction。
NetWork(网络内存):
在这里插入图片描述
计算方式和 jvm 执行开销一样。
Task 内存:
在这里插入图片描述
Task 堆上内存为 none,为 Flink 内存扣除掉其他内存所得。

内存配置所做优化

优化前:
在这里插入图片描述
存在的问题:
1)进程总内存设置为 16g,但是 Task 所分得的堆内存只占 2 分之 1,容易造成频繁 GC,影响性能,甚至出现 OOM。
2)除了 Task 内存其他内存利用率不高,浪费资源,主要使用的就是 Task 内存资源。
优化后:在这里插入图片描述
优化参数(根据需求自行配置,根据内存使用率来调整):
taskmanager.memory.managed.size: 128m
taskmanager.memory.jvm-metaspace.size: 512m
taskmanager.memory.network.max: 256m
taskmanager.memory.jvm-overhead.max: 512m

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值