故障排查

不明任务失败

任务状态被外部更改

任务状态可能被除执行器之外的组件更改的原因有很多,这在查看任务实例或调度器日志时可能会造成混淆。

以下是一些可能导致任务状态被执行器之外的组件更改的示例情形:

进程被信号终止

有时,Airflow 或某些关联系统会终止任务实例的 TaskRunner,导致任务实例失败。

下面我们讨论几种常见情况。

DAG 运行超时

可以在 DAG 定义中通过 dagrun_timeout 指定 DAG 运行超时。任务进程可能会被 SIGTERM(退出码 -15)终止。

内存不足错误(OOM)

当任务进程消耗的内存超出工作节点的容量时,最好的情况是它会被 SIGKILL(退出码 -9)终止。根据配置和基础设施的不同,也可能会因 OOM 导致整个工作节点被杀死,随后任务因心跳失败而被标记为失败。

残留的任务监督进程

在极高并发情况下,任务监督进程内部的套接字处理程序可能会错过任务进程的最终 EOF 事件。发生这种情况时,监督进程会认为套接字仍然打开而不退出。workers.socket_cleanup_timeout 选项控制任务完成后监督进程在强制关闭剩余套接字前的等待时间。如果观察到残留的 supervisor 进程,请考虑增加此延迟。

此条目是否有帮助?