Hi! 你的 state backend 是 heap state backend 吗?如果是的话,Flink 流作业运行过程中的状态会存储在堆中,checkpoint 也会存储在堆中,确实有可能导致 OOM。可以尝试换成其他 state backend 看一下。
Liu Join <lzy139...@outlook.com> 于2022年1月21日周五 13:20写道: > > 我已经将5s的时间窗口替换为100条的countWindowAll,具体实现为使用aggregate函数将窗口内的数据拼接为一条sql语句,sql语句如下:replace > into table (a1,a2,a3,a4,..) values(…) > 但还是没有解决, > heap dump暂时无法提供, > taskmanager内存分配如下: > task heap:2.76G,network:343MB,JVMMetaspace:256MB > > > 我一共运行了两个任务,都会出现这种问题,但之前写过一个简单的数据同步的程序没有出错,就是将一个MySQL库中的500张表同步到另一个MySQL库,不知道对于这种问题有没有解决的方向。 > > 之前在监控任务运行时发现是MySQLsource先失败,然后导致整个任务挂了,在开启checkpoint时,MySQLsource和开窗之前的部分为一个parallelism,这个parallelism的checkpoint大小一直是136MB,从任务开始到结束都是136MB,其他运算的checkpoint不到1MB,是否有这部分原因 > 从 Windows 版邮件<https://go.microsoft.com/fwlink/?LinkId=550986>发送 > > 发件人: Caizhi Weng<mailto:tsreape...@gmail.com> > 发送时间: 2022年1月21日 10:52 > 收件人: flink中文邮件组<mailto:user-zh@flink.apache.org> > 主题: Re: flink任务提交到集群执行一段时间报错Java heap space > > Hi! > > 5s 的窗口拼接 sql 语句看起来比较可疑,具体是怎么实现的?另外可以把 task manager 的 heap dump > 出来看一下哪里占比较多的堆内存。 > > Liu Join <lzy139...@outlook.com> 于2022年1月20日周四 13:28写道: > > > 环境: > > > > > flink1.13.5,Standalone模式集群,jobmanager内存2GB,taskmanager内存4GB,集群包括一个jobmanager和两个taskmanager,每个taskmanager有2个slot。 > > > > > > > 任务内容是读取2万张表的数据,数据每1分钟一条,每10分钟输出每张表的最后一条数据。代码中使用了map、filter、watermark、开了一个10分钟的滑动窗口,使用reduce获得最后一条数据,因为sink是mysql,配置不高,所以将最后一条数据拼成批量插入语句才往MySQL写入。开了一个5s的窗口用于拼接sql语句。 > > > > 报错内容: > > java.lang.OutOfMemoryError: Java heap space > > > > 报错表象: > > > > > 整个taskmanager内存被占满,任务失败重启后taskmanager内存仍然是满的,导致任务再次失败。之后任务直接挂了。时间长了之后内存没释放,Taskmanager进程也会挂了。 > > 从 Windows 版邮件<https://go.microsoft.com/fwlink/?LinkId=550986>发送 > > > > > >