본문 바로가기

OpenSource/Airflow

[Airflow] Trouble Shooting

1. webserver에서 "Some workers seem to have died and gunicorn did not restart them as expected" 에러 발생하며 웹페이지가 보여지지 않을때

원인: webserver에 메모리 부족으로 인하여 gunicorn worker가 kill 됨
해결책:

  • airflow.cfg 의 [webserver] 섹션에 workers 의 갯수를 줄인다(default 4).
    혹은 도커 컨테이너 생성시 environment에 AIRFLOW__WEBSERVER__WORKERS를 지정한다.
  • webserver의 사용 메모리를 키운다.
    필자는 docker-compose를 이용하여 airflow 환경을 구성중이다. 이때 mem_limit을 이용하여 메모리를 조절할 수 있다.

docker-compose 예시

## docker-compose.yaml의 일부
webserver:
    container_name: airflow_webserver
    build: .
    depends_on:
      - postgres
      - redis
    environment:
      - LOAD_EX=n
      - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
      - EXECUTOR=Celery
      - AIRFLOW__WEBSERVER__WORKERS=3
    volumes:
      - ./dags:/usr/local/airflow/dags
    ports:
      - "8080:8080"
    command: webserver
    healthcheck:
      test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
      interval: 30s
      timeout: 30s
      retries: 3
    ## 메모리 조절
    mem_limit: "4g"

기타

webserver의 worker 사이즈를 줄이면 여러 유저가 접근시 웹페이지가 느려질수 있다. 따라서 가능하다면 메모리 조절로 해결하는것이 좋다.