Composer 2.6.6任务报Negsignal.SIGKILL但Dataproc作业实际成功
我们使用Composer 2.6.6(对应Airflow 2.5.3),有一个提交到Dataproc Serverless Batches的作业VANI-UEBA3。Dataproc Serverless UI显示作业运行成功,但Airflow(Composer)UI却频繁报Task exited with Negsignal.SIGKILL错误(该错误表示任务因资源占用过高被系统终止)。相关错误日志片段如下:
[2024-06-10, 00:41:54 UTC] {credentials_provider.py:353} INFO - Getting connection using
google.auth.default()since no explicit credentials are provided.
[2024-06-10, 00:44:32 UTC] {local_task_job.py:212} INFO - Task exited with return code Negsignal.SIGKILL
[2024-06-10, 00:44:33 UTC] {taskinstance.py:2599} INFO - 0 downstream tasks scheduled from follow-on schedule check
由于作业实际运行在Dataproc Serverless集群而非Airflow集群,理论上作业完成后Airflow侧不应出现该错误,请问问题原因及解决方法?
这个问题的核心是Airflow Worker进程(而非Dataproc作业本身)因资源不足被系统OOM Killer终止,具体诱因包括:
- Airflow Worker节点的CPU/内存配额过低:虽然Dataproc作业在远端集群执行,但Airflow Worker需要持续轮询作业状态、拉取日志或处理结果,低配置Worker会因持续负载耗尽资源触发SIGKILL。
- 大日志量拉取压力:如果Dataproc作业生成海量日志,Airflow Worker同步拉取并处理这些日志时会占用大量内存,直接触发OOM。
- 旧版本Dataproc Hook的低效轮询:Airflow 2.5.3对应的Dataproc Hook存在轮询间隔过短、状态检查逻辑未优化的问题,导致Worker进程长期高负载运行。
- 提升Worker资源配置:在Composer控制台调整Worker节点的机器类型,选择更高配置的实例(比如从n1-standard-1升级到n1-standard-2);同时修改Airflow的
worker_memory、worker_cpu参数,增加单个Worker进程的可用资源配额。 - 优化日志拉取策略:在Dataproc作业配置中设置日志过滤规则,仅保留关键日志;或者在Airflow任务中禁用全量日志拉取,只同步作业状态而非完整日志内容。
- 调整状态轮询间隔:修改Dataproc任务的
poll_interval参数,延长两次状态检查的时间间隔(比如从默认10秒改为30秒),降低Worker的轮询频率。 - 升级Airflow/Dataproc Hook版本:条件允许的话,升级Composer到更高版本(对应Airflow 2.6+),新版本Hook优化了轮询逻辑和资源占用,能有效避免这类问题。
- 排查内存泄漏:通过Composer监控面板查看Worker进程的内存使用趋势,确认是否存在自定义Operator或Hook的内存未释放问题,及时修复代码中的泄漏点。
内容的提问来源于stack exchange,提问作者Karan Alang

