流计算 Oceanus JobManager Full GC 过久事件

Flink 作业的 JobManager 负责整个作业的管理和调度工作,它是一个 JVM 进程,有着自己的堆内存空间。对于使用 FLIP-27 接口的数据源(Source)Connector,其 Enumerator 会把各类分片信息会记录到堆内存中。如果分片过多,就可能造成堆内存用量过高,影响整个作业的稳定性。

相关产品
流计算 Oceanus 产品页,含版本规格、价格与购买入口。

一、事件介绍

当 JVM 的堆内存空间即将耗尽时,会通过 Full GC(内存回收机制)来释放空间。如果每次的回收量很小,难以及时释放堆内存空间时,JVM 会频繁而持续地触发 Full GC,该操作会占用大量的 CPU 时间,造成作业的执行线程无法正常工作,此时会触发本事件。

注意:该功能目前为 Beta 版,暂不支持规则的自定义,后续该能力会陆续上线。

二、判定标准

系统每5分钟会检测一次 Flink 作业的 JobManager 的 Full GC 耗时。

当发现 JobManager 的 Full GC 耗时增量占整个检测周期的30%以上(即5分钟内 Full GC 耗时超过1.5分钟)时,表明作业出现了严重的 Full GC 问题,会触发该事件。

注意:为了避免频繁告警,每个作业的每个运行实例 ID 每小时最多触发一次该事件的推送。

三、告警配置

用户可以对该事件 配置作业监控告警(异常事件),并实时接收触发和恢复的告警通知。

四、处理建议

收到该事件推送后,我们建议增加作业的 资源配置,例如调大 JobManager 的规格(提升 JobManager 堆内存的最大可用空间,可以容纳更多的状态数据)。

此外,如果你使用的是 MySQL CDC 数据源,则建议你在 WITH 参数中,增加单个分片的大小,即调大 scan.incremental.snapshot.chunk.size 参数,以避免分片数过多导致 JobManager 堆内存用尽。

如果作业日志中没有找到 OutOfMemoryError: Java heap space 等关键字,且目前作业暂时正常运行,我们建议对该作业 配置告警,将流计算作业失败事件加入告警规则,以第一时间获取作业崩溃的事件推送。

如果以上方法均未能解决问题,可以通过 工单 等方式联系我们的技术人员以协助定位。

赞 (0)
上一篇 4天前
下一篇 4天前