首发链接: https://www.jianshu.com/writer#/notebooks/20005301/notes/43493757
问题现象
一个使用10秒滚动窗口的任务在平稳运行一段时间之后出现了频繁的重启。在TaskManager日志中能看到以下文本:
2019-03-17 16:05:28,854 INFO org.apache.flink.yarn.YarnTaskExecutorRunner - RECEIVED SIGNAL 15: SIGTERM. Shutting down as requested.
原因定位
- 首先可以看到是YarnTaskExecutorRunner收到了SIGTERM信号, 因为是部署在Yarn上,所以基本可以定位到是Yarn因为什么原因从OS的层面将这个进程给Kill掉的。
- 代码上也可以根据这个日志可以定位到Flink的SignalHandler,下图可以看到Handler的构造调用过程。不管是YarnSessionClusterEntrypoint还是YarnTaskExecutorRunner的主函数都会注册,并且会在接收到OS的"TERM", “HUP”, "INT"信号是打出日志。
private static class Handler implements sun.misc.SignalHandler { private final Logger LOG; private final sun.misc.SignalHandler prevHandler; Handler(String name, Logger LOG) { this.LOG = LOG; prevHandler = Signal.handle(new Signal(name), this); } /** * Handle an incoming signal. * * @param signal The incoming signal */ @Override public void handle(Signal signal) { LOG.info("RECEIVED SIGNAL {}: SIG{}. Shutting down as requested.", signal.getNumber(), signal.getName()); prevHandler.handle(signal); } }
- 接着可以观察这个TaskManager所在机器的Yarn的NodeManager的日志,grep出和这个容器相关的日志,可以看到最后如下。TaskManager内存超出了物理内存的限制。但是从GC日志来看,连Full GC都很少发生。