This is an automated email from the ASF dual-hosted git repository.

kaxilnaik pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 74283fb2a86 Add FAQ entry for API server memory growth with gunicorn 
worker recycling (#65036)
74283fb2a86 is described below

commit 74283fb2a865dd7463690082bfb171079aacd68a
Author: Kaxil Naik <[email protected]>
AuthorDate: Sat Apr 11 00:56:36 2026 +0100

    Add FAQ entry for API server memory growth with gunicorn worker recycling 
(#65036)
    
    * Add FAQ entry for API server memory growth with gunicorn fix
    
    Users experiencing API server memory growth from accumulated
    serialized DAG cache entries can use gunicorn with rolling worker
    restarts as the recommended solution. This FAQ entry documents the
    configuration and cross-references the dag version inflation FAQ.
    
    * Add version availability note for gunicorn support
---
 airflow-core/docs/faq.rst | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/airflow-core/docs/faq.rst b/airflow-core/docs/faq.rst
index fe48c3695dc..a5064cc3dfa 100644
--- a/airflow-core/docs/faq.rst
+++ b/airflow-core/docs/faq.rst
@@ -666,6 +666,43 @@ try pausing the Dag again, or check the console or server 
logs if the
 issue recurs.
 
 
+API Server
+^^^^^^^^^^
+
+.. _faq:api-server-memory-growth:
+
+How to prevent API server memory growth?
+-----------------------------------------
+
+The API server caches serialized Dag objects in memory. Over time, as Dag 
versions accumulate
+(see :ref:`faq:dag-version-inflation`), this cache grows and can consume 
several gigabytes of memory.
+
+The recommended solution (available since Airflow 3.2.0) is to use 
**gunicorn** with **rolling worker
+restarts**. Gunicorn periodically recycles worker processes, releasing all 
accumulated memory. It also
+uses ``preload`` + ``fork``, so workers share read-only memory pages via 
copy-on-write, reducing overall
+memory usage by 40-50% compared to uvicorn's multiprocess mode.
+
+To enable gunicorn with worker recycling:
+
+.. code-block:: ini
+
+    [api]
+    server_type = gunicorn
+    # Restart each worker every 12 hours (43200 seconds)
+    worker_refresh_interval = 43200
+    worker_refresh_batch_size = 1
+
+This requires the ``apache-airflow-core[gunicorn]`` extra to be installed.
+
+See :ref:`config:api__server_type`, 
:ref:`config:api__worker_refresh_interval`, and
+:ref:`config:api__worker_refresh_batch_size` for the full configuration 
reference.
+
+.. note::
+
+    Worker recycling handles memory growth from *any* source, not just the Dag 
cache. It is the
+    recommended approach for production API server deployments.
+
+
 MySQL and MySQL variant Databases
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

Reply via email to