Moait
홈인기 피드모든 블로그모든 태그
홈인기 피드모든 블로그모든 태그

Python의 GC가 멀티프로세싱과 만나면 생기는 일 - Python과 Airflow, 그리고 관련된 문제 해결기 2편

NAVER D2 faviconNAVER D2·DevOps·
PythonMySQLAirflowGarbage CollectionMemray
2026년 10월 08일0

AI 요약

이 글은 AI가 요약했어요. 정확한 내용은 꼭 원문을 확인해 주세요!

핵심 요약

NAVER D2가 Python GC와 fork의 상호 작용으로 생기는 메모리 증가와 MySQL 연결 이슈를 Memray 분석과 gc.freeze로 해결하고 Airflow의 핵심 컴포넌트에서 메모리 효율을 개선했습니다.

구현 방법

  • fork 직전 heavy 모듈 로드 지연 및 import 최적화
  • LocalExecutor: fork 직전 gc.freeze, 자식 생성 후 gc.unfreeze
  • dag-processor: 파싱 루프 진입 직전에 한 번 freeze
  • CeleryExecutor: preload 시 gc.freeze, worker_ready 시 unfreeze
  • MySQL 연결 이슈 대응: connect 이벤트 추적 및 커넥션 종료 원인 파악
  • gc.freeze/unfreeze 오버헤드 약 19μs/10μs
  • Airflow 3.1.4/3.1.7, Celery provider 3.17.2 적용

주요 결과

  • LocalExecutor: 컨테이너 합계 PSS 3.6GB→1.5GB, 프로세스당 100MB→40MB
  • dag-processor: 메모리 스파이크 감소 및 재시작 이슈 해결
  • CeleryExecutor: 워커당 2.25GB→1.07GB

연관 피드

%가 높을수록 이 글과 비슷할 가능성이 높아요!
No Image
79%

Python의 멀티프로세싱과 Airflow, 그리고 관련된 문제 해결기 1편

NAVER D2 faviconNAVER D2·2026년 09월 01일
No Image
69%

Airflow 3의 새벽 배치를 멈춘 건 JWT가 아니라 OOM이었다

롯데ON favicon롯데ON·2026년 08월 11일
No Image
66%

Oozie/Sqoop에서 Airflow/Spark로: 데이터 파이프라인 전환기

SK플래닛 faviconSK플래닛·2026년 09월 07일