一、事件介绍
当 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 等关键字,且目前作业暂时正常运行,我们建议对该作业 配置告警,将流计算作业失败事件加入告警规则,以第一时间获取作业崩溃的事件推送。
如果以上方法均未能解决问题,可以通过 工单 等方式联系我们的技术人员以协助定位。