各位大佬好:
是这样的,我在跑一个批处理任务的过程中发现,在Flink 
Session模式下,多次重跑同一个批处理任务会导致系统内存被耗尽,最终导致系统oom之后将taskmanager进程杀掉。

按道理说一个job跑完,它所占用的资源都应该释放掉吧,以便后续的job继续执行。但是测试结果显示并没有

1、环境:
5节点的flink 1.14.3 standalone集群,宿主机是64G内存,每个节点分配33G内存,22个slot
5节点的Hadoop 3.3.1 集群,Hive 3.1.2,iceberg 0.13.1
数据以iceberg表的形式存储在HDFS上
2、批处理任务:
将表A的5千万条数据,对其主键进行Hash之后,插入另一个表B中。SQL语句如下:
insert into flinal_temp
select step_id,
param_id,
wafer_id,
chip_id,
product_id,
hive_partition_content,
cast (wafer_start_date as date),
(HASH_CODE(step_id || param_id || chip_id || wafer_id)) % 100 as part_id from 
test_5qw;
3、出现问题:
多次跑同一个任务(非并行),就可以通过top命令观察到系统可用内存越来越少,到一定程度之后会触发oom杀掉taskmanager进程
4、DAG图
4、Flink配置


5、集群节点
6、其中两台的内存使用情况

目前是无作业运行状态,两台内存占有率均达到了90%,Flink任务刚启动时,内存占有率仅为15%左右

手动触发GC也没有效果,内存并不会下降
7、触发oom杀进程之后
内存恢复正常
因为OOM系统杀掉74904 Taskmanager进程

可以看到因为内存OOM导致TM被杀掉,一台主机64G内存,分给TM 33G,按道理说不应该超过分配的内存才对

请大佬们帮忙看一下吧,感谢!!!



















renshang...@deepexi.com

回复