手动触发后Airflow DAG运行停滞在queued状态,请求排查原因
以下是针对该问题的常见排查方向,结合你环境中其他DAG正常的情况,重点关注新建DAG特有的配置或状态:
DAG未被调度器加载
新建DAG后,调度器可能未自动扫描到文件。先执行airflow dags list确认目标DAG是否在列表中:- 如果不在,检查DAG文件是否放在Airflow配置的
dags_folder路径下,文件后缀是否为.py; - 执行
python your_dag_file.py检查DAG文件是否存在语法错误,语法错误会导致调度器无法解析加载。
- 如果不在,检查DAG文件是否放在Airflow配置的
start_date配置不合理
若start_date设置为未来时间,或者start_date在过去但未满足schedule_interval的触发条件,DAG会处于排队等待状态。确认start_date是早于当前时间的固定值(避免用datetime.now()这种动态值),且schedule_interval配置符合预期(比如@hourly或具体cron表达式)。并发限制触发
Airflow的全局并发(core.parallelism)、DAG级并发(dag_concurrency)、任务级并发(task_concurrency)任一达到上限,新任务都会被卡在队列:- 通过Airflow UI的Admin > Configurations查看当前并发参数;
- 临时调整新建DAG的
dag_concurrency参数(比如设置为10),测试是否能正常执行。
执行器资源不足
根据你使用的执行器类型排查:- CeleryExecutor:执行
celery inspect active查看Worker节点的活跃任务数,检查Worker的CPU/内存是否耗尽,或Worker数量是否不足以承接新任务; - LocalExecutor:检查当前机器的进程数是否达到系统上限,或资源(CPU/内存)是否被其他进程占用。
- CeleryExecutor:执行
任务池(Pool)槽位耗尽
如果新建DAG的任务指定了某个pool,而该pool的可用槽位已被其他任务占满,任务会排队等待。通过Airflow UI的Admin > Pools查看目标pool的使用情况,可临时增加pool槽位或修改任务的pool参数。触发命令参数错误
确认airflow dags trigger命令的参数是否正确:- 检查DAG ID是否输入正确;
- 若指定了
--execution-date参数,确认该时间是过去的时间,未来的执行时间会导致任务延迟触发。
Catchup导致任务积压
若新建DAG的catchup=True,且start_date到当前时间存在多个未执行的调度周期,调度器会生成大量待执行任务实例,新触发的任务会被排在积压任务之后。可临时设置catchup=False,或清理积压的任务实例后再触发。
内容的提问来源于stack exchange,提问作者Sam Firke

