记一次flink资源使用优化
一.现状分析
现有任务的资源配置如下,根据ui监控中Garbage Collection可以发现,此任务频繁的发生GC,且老年代GC时间较久
二.整体memory使用分析如下
-
Framework Heap(框架堆内存)用于Flink框架自身的堆内存(如JobManager和TaskManager的元数据管理、调度器等)。
-
Task Heap(任务堆内存) 指标值:4.12GB / 76% 使用(3.14GB/4.12GB) 作用: 用于Flink任务执行时的堆内存(如Kafka消费者、Paimon写入算子、状态后端缓存等)。
当前分析: 使用率接近高风险阈值(>70%),导致频繁Full GC,出现OutOfMemoryError问题 -
Managed Memory(托管内存) 指标值:3.50GB / 0% 使用(0B/3.50GB) 作用: Flink管理的堆外内存,用于状态后端(如RocksDB的缓存)和批处理操作。
当前分析:状态后端使用的是FsStateBackend,占用的是Task Heap,此处未被使用 -
Framework Off-Heap(框架堆外内存) 指标值:128MB / N/A 作用: Flink框架使用的堆外内存(如Netty网络缓冲区元数据)。
当前分析: 默认配置足够,无需调整。 -
Task Off-Heap(任务堆外内存) 指标值:0B / N/A 作用: 任务执行时的堆外内存(如自定义算子的Native库)。
当前分析: 未启用,说明任务未使用堆外状态或自定义算子。无需调整 -
Network(网络内存) 指标值:896MB / 0.59% 使用(5.28MB/896MB) 作用: 用于任务之间的网络数据传输(如Shuffle、广播等)。
当前分析: 问题:使用率过低(<1%),存在资源浪费。 -
JVM Metaspace(元空间) 指标值:256MB / 40.23% 使用(103MB/256MB) 作用: 存储JVM类元数据(如加载的类、方法信息)。
当前分析: 使用率正常,无需调整。保持默认,除非出现Metaspace OOM。 -
JVM Overhead(JVM开销内存) 指标值:1.00GB / N/A 作用: 预留的JVM内部开销内存(如线程栈、JNI等)。
当前分析: 默认配置足够,无需调整。
三.最终优化措施
减少了Managed Memory和Network内存,增大Task Heap内存,效果如下图监控所示,大大减少了GC的数量,留有足够的Task Heap内存保证任务正常运行