当前位置: 首页 > 知识库问答 >
问题:

使用所有系统资源Airbnb气流

阎鸿煊
2023-03-14

我们已经使用LocalExecutor为ETL设置了Airbnb/Appache Airflow,并且随着我们开始构建更复杂的DAG,我们注意到Airflows已经开始使用难以置信的系统资源。这让我们感到惊讶,因为我们主要使用Airflow来协调发生在其他服务器上的任务,所以Airflow-DAG将大部分时间花在等待它们完成上——本地没有实际执行。

最大的问题是Airflow似乎总是使用100%的CPU(在AWS t2.medium上),并且在默认airflow.cfg设置下使用超过2GB的内存。

如果相关,我们使用docker-compose运行Airflow运行容器两次;一次作为调度程序,一次作为webserver

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

我想从理论上讲,我可以减少枪工的数量(默认为4),但我不确定所有的/usr/bin/dockerd进程是什么。如果 Docker 使事情复杂化,我可以删除它,但它使更改的部署变得非常容易,如果可能的话,我宁愿不删除它。

共有3个答案

西门飞翮
2023-03-14

尝试更改< code>airflow.cfg中的以下配置

# after how much time a new DAGs should be picked up from the filesystem
min_file_process_interval = 0

# How many seconds to wait between file-parsing loops to prevent the logs from being spammed.
min_file_parsing_loop_time = 1
公良信然
2023-03-14
匿名用户

我刚刚遇到了这样的问题。在t2.xlarge实例中,Airflow消耗了大约一个完整的vCPU,其中绝大多数来自调度器容器。查看调度器日志,我可以看到它每秒处理我的单个DAG不止一次,尽管它一天只运行一次。

我发现< code > MIN _ FILE _ PROCESS _ INTERVAL 被设置为默认值< code>0,因此调度程序在DAG上循环。我将进程间隔更改为< code>65秒,现在,在t2.medium实例中,Airflow使用的vCPU不到10%。

邓鸿彩
2023-03-14

我也尽我所能降低CPU使用率,Matthew Housley关于MIN_FILE_PROCESS_INTERVAL的建议就是成功的秘诀。

至少在空气流量达到1.10之前……CPU使用率再次飙升。

因此,为了让气流在一个标准的数字海洋水滴上正常工作,我需要做的一切就是使用2gb内存和1个vcpu:

防止气流始终重新加载 dags 并设置:AIRFLOW__SCHEDULER__MIN_FILE_PROCESS_INTERVAL=60

airflow 1.10中的AIRFLOW-2895错误会导致高CPU负载,因为调度程序会不间断地循环。

它已经在master中修复了,并有望包含在airflow 1.10.1中,但可能需要几周或几个月才能发布。同时,此修补程序解决了以下问题:

--- jobs.py.orig    2018-09-08 15:55:03.448834310 +0000
+++ jobs.py     2018-09-08 15:57:02.847751035 +0000
@@ -564,6 +564,7 @@

         self.num_runs = num_runs
         self.run_duration = run_duration
+        self._processor_poll_interval = 1.0

         self.do_pickle = do_pickle
         super(SchedulerJob, self).__init__(*args, **kwargs)
@@ -1724,6 +1725,8 @@
             loop_end_time = time.time()
             self.log.debug("Ran scheduling loop in %.2f seconds",
                            loop_end_time - loop_start_time)
+            self.log.debug("Sleeping for %.2f seconds", self._processor_poll_interval)
+            time.sleep(self._processor_poll_interval)

             # Exit early for a test mode
             if processor_manager.max_runs_reached():

将其与补丁 -d 一起使用/usr/本地/库/蟒蛇 3.6/站点包/气流/

如果升级为使用新的RBAC Web服务器UI,您可能还会注意到Web服务器持续使用大量CPU。

出于某种原因,RBAC界面在启动时使用了大量的CPU。如果你运行在一个低性能的服务器上,这会导致一个非常慢的网络服务器启动和持续的高CPU使用率。

我将此错误记录为AIRFLOW-3037。要解决此问题,您可以调整配置:

AIRFLOW__WEBSERVER__WORKERS=2 # 2 * NUM_CPU_CORES + 1
AIRFLOW__WEBSERVER__WORKER_REFRESH_INTERVAL=1800 # Restart workers every 30min instead of 30seconds
AIRFLOW__WEBSERVER__WEB_SERVER_WORKER_TIMEOUT=300 #Kill workers if they don't start within 5min instead of 2min

通过所有这些调整,我的气流在具有1个vcpu和2gb内存的数字海洋标准液滴上的空闲时间仅使用了少数%的CPU。

 类似资料:
  • 7.2.2.Android系统资源 我们的程序都有自己的资源,Android系统也同样。Android系统中内置了许多图标、图像、音频等等各种资源文件。回想下,应用程序的资源文件都在/res/目录之下,要在XML中引用它们,只需填上地址即可;而引用系统资源,则需要为地址加一个前缀android:,比如@android:drawable/ic_menu_preferences。在Java中引用的话,

  • Current Usage # resource_getrusage.py import resource import time RESOURCES = [ ('ru_utime', 'User time'), ('ru_stime', 'System time'), ('ru_maxrss', 'Max. Resident Set Size'), ('ru_i

  • 把这部分的log摘取出来. 以org.nutz.resource下的log为准 2015-03-30 10:49:49,383 org.nutz.resource.Scans.<init>(Scans.java:484) DEBUG - Locations for Scans: [JarResourceLocation [jarPath=D:\nutzbook\apache-tomcat-8.0.

  • Qt4 资源系统是与平台无关的,它被用来存储应用程序可执行文件运行时使用的二进制 文件(比如图标文件、翻译文件等)。它也是 Qt 的核心机制之一。当你的应用程序总是使 用一些特定的文件集合时,它会非常有用,并且能够保证文件不易丢失。 Qt4 资源系统的运转需要 qmake、rcc((Qt's resource compiler)以及 QFile 的紧密 配合。 8.6.1 Qt 资源系统的改进 Q

  • A-Frame允许我们把资源集中放在一个地方,便于预加载和缓存来达到更好的性能。 游戏和富客户端3D体验传统上会在渲染场景之前预加载资产,如模型或纹理贴图,这样可以确保资源不会出现视觉丢失,避免场景试图在渲染时才去获取资产所导致的性能问题。 我们把资源放在<a-assets>里面,并且我们把<a-assets>放在<a-scene>中。资源包括: <a-asset-item> - 杂项资产,如三维