JobManager Full GC 过久事件

最近更新时间:2023-06-21 15:22:02

我的收藏

事件介绍

Flink 作业的 JobManager 负责整个作业的管理和调度工作,它是一个 JVM 进程,有着自己的堆内存空间。对于使用 FLIP-27 接口的数据源(Source)Connector,其 Enumerator 会把各类分片信息会记录到堆内存中。如果分片过多,就可能造成堆内存用量过高,影响整个作业的稳定性。
当 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 等关键字,且目前作业暂时正常运行,我们建议对该作业 配置告警,将流计算作业失败事件加入告警规则,以第一时间获取作业崩溃的事件推送。
如果以上方法均未能解决问题,可以通过 工单 等方式联系我们的技术人员以协助定位。