You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow DAG执行停滞,触发[heartbeat]错误求助

排查Airflow任务持续Running且日志输出Heartbeat的问题

核心排查方向

1. 验证LocalExecutor配置有效性

  • 检查airflow.cfg关键配置项:
    • 确认executor = LocalExecutor
    • sql_alchemy_conn指向正确的MySQL实例
    • parallelism、dag_concurrency、max_active_tasks_per_dag设置合理(避免因资源限制导致任务挂起)
  • 重启Airflow Webserver和Scheduler后,查看Scheduler日志,确认是否有Starting LocalExecutor输出,无该日志则说明配置未生效,需检查cfg文件路径是否正确(比如启动时未指定自定义配置路径)

2. 排查MySQL连接与锁机制

  • 调整MySQL的wait_timeout和interactive_timeout为86400(24小时),避免连接被主动断开
  • 执行SQL查询运行中任务的进程ID:
    SELECT task_id, pid FROM task_instance WHERE state = 'running';
    
    用ps aux | grep <pid>验证进程是否真实存在,若进程已消失,说明任务进程异常退出但Airflow未检测到,可手动更新任务状态后排查进程崩溃原因
  • 确认MySQL事务隔离级别为READ COMMITTED,执行SELECT @@tx_isolation;检查,不符则修改MySQL配置

3. 定位任务HTTP请求问题

  • 终端测试成功但UI触发失败,大概率是环境变量差异:Scheduler进程缺失终端中存在的代理、认证等环境变量(如HTTP_PROXY、API_KEY),对比两者env输出补全变量
  • 给HTTP请求添加超时限制,避免无限等待:
    import requests
    from airflow.exceptions import AirflowFailException
    
    def http_task_func():
        try:
            resp = requests.get("your-target-endpoint", timeout=30)
            resp.raise_for_status()
            return resp.json()
        except requests.exceptions.RequestException as e:
            raise AirflowFailException(f"HTTP请求失败: {str(e)}")
    

4. 检查Scheduler与子进程状态

  • 确认Scheduler进程正常运行:ps aux | grep airflow scheduler或systemctl status airflow-scheduler(systemd环境)
  • 验证服务器资源(CPU、内存)是否充足,避免因资源耗尽导致子进程无法启动或挂起
  • 查看Scheduler日志,排查是否存在Error executing task或子进程启动失败的报错信息

5. 确认版本兼容性

  • 检查MySQL与Airflow版本匹配:Airflow 2.x要求MySQL 5.7+或8.0+,版本不兼容可能引发状态同步异常
  • 尝试升级Airflow至最新稳定版(如2.8.x),排查是否为已知版本bug导致的任务状态异常

内容的提问来源于stack exchange,提问作者Sri_Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:22:38