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

Airflow 2.8.1中Spotify ETL任务持续运行无法完成求助

解决Airflow任务因内存不足被SIGKILL的方案

1. 调整Airflow Worker的内存限制

找到Airflow配置文件airflow.cfg(默认路径~/airflow/airflow.cfg),根据你使用的Executor类型调整参数:

  • 若用CeleryExecutor:修改worker_concurrency(比如从默认4改为2,减少并发任务数),同时设置worker_max_memory_per_child = 2000MB限制单个子进程的内存上限
  • 若用SequentialExecutor:关闭其他后台高内存占用进程,或直接在配置中限制Airflow进程的资源分配

2. 优化ETL函数的内存占用

既然单独运行函数正常,重点优化函数在Airflow环境下的内存使用:

  • 检查get_played_track_etl_2是否一次性加载全量Spotify数据,改成分批处理,每次处理小批量数据后及时释放内存
  • 用生成器替代列表存储中间数据,减少内存占用;处理完无用变量后用del关键字主动删除
  • 若用pandas处理数据,指定数据类型(如dtype参数)、将字符串转为category类型,降低内存消耗

3. 切换Executor类型

默认的SequentialExecutor是单进程运行,可换成LocalExecutor控制并发:

  • 修改airflow.cfg中executor = LocalExecutor
  • 同时调整parallelism(全局并发数)和dag_concurrency(单DAG并发数)为2,减少同时运行的任务数量

4. 释放系统可用内存

macOS环境下临时释放内存:

  • 关闭浏览器、大型IDE等高内存占用应用
  • 终止后台的Spotify、iCloud同步等非必要进程
  • 短期可启用虚拟内存(系统偏好设置-通用-存储-管理-优化存储),但长期建议升级物理内存

5. 监控任务内存变化

在ETL函数中加入内存监控代码,定位内存激增节点:

import psutil
import os

def get_played_track_etl_2():
    process = psutil.Process(os.getpid())
    print(f"当前内存使用: {process.memory_info().rss / 1024 ** 2} MB")
    # 原有ETL逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:18:20