Airbnb Airflow使用所有系统资源

我们已经使用LocalExecutor为我们的ETL设置了Airbnb / Apache Airflow,而且随着我们开始构build更复杂的DAG,我们已经注意到,Airflow已经开始使用令人难以置信的系统资源。 这对我们来说是令人惊讶的,因为我们主要使用Airflow来编排其他服务器上发生的任务,所以Airflow DAG花费大部分时间等待它们完成 – 没有在本地发生的实际执行。

最大的问题是,Airflow似乎在任何时候都使用了100%的CPU(在AWS t2.medium上),并且使用了超过2GB的内存以及默认的airflow.cfg设置。

如果相关,我们使用docker-compose运行Airflow两次; 一次作为scheduler ,一次作为webserver

我们在这里做错了什么? 这是正常的吗?

编辑:这是从htop的输出,由%内存使用(因为这似乎是现在的主要问题,我得到了CPU): HTOP Htop2

我想在理论上我可以减lessgunicorn worker的数量(默认是4),但是我不确定所有的/usr/bin/dockerd进程是什么。 如果Docker复杂的东西,我可以删除它,但它使部署的变化很容易,我宁愿不删除它,如果可能的话。

我遇到了这样的问题。 在t2.xlarge的实例中,气stream消耗了大约一个完整的vCPU,其中绝大多数来自调度程序容器。 检查调度程序日志,我可以看到它正在处理我的单个DAG不止一次,即使它只能每天运行一次。 我发现MIN_FILE_PROCESS_INTERVAL被设置为默认值0,所以调度器在DAG上循环。 我将进程间隔更改为65秒,而Airflow现在使用的t2.medium实例中的虚拟CPU数量不到10%。

对于初学者,您可以使用htop来监视和debugging您的CPU使用率。

我build议你在同一个docker容器上运行webserver和scheduler进程,这样可以减less在ec2 t2.medium上运行两个容器所需的资源。 气stream工作人员需要资源来下载数据并在内存中读取数据,但是networking服务器和调度程序是非常轻量级的过程。 确保在运行webserver时,您正在使用cli控制在实例上运行的工作人员的数量。

 airflow webserver [-h] [-p PORT] [-w WORKERS] [-k {sync,eventlet,gevent,tornado}] [-t WORKER_TIMEOUT] [-hn HOSTNAME] [--pid [PID]] [-D] [--stdout STDOUT] [--stderr STDERR] [-A ACCESS_LOGFILE] [-E ERROR_LOGFILE] [-l LOG_FILE] [-d]