Python 멀티프로세싱에서 shared_memory 누수 잡은 방법
· tech
비전 파이프라인에서 shared_memory 객체가 누수되어 메모리가 쌓이는 문제를 close/unlink 순서로 해결했다.
실시간 추론 파이프라인을 Python 멀티프로세싱으로 돌리는데, 몇 시간 뒤 OOM에 가까워졌다.
원인은 multiprocessing.shared_memory 정리 누락이었다. 프로세스가 죽어도 segment가 남아 /dev/shm가 계속 커졌다.
핵심은 라이프사이클 분리다.
- consumer:
close() - owner:
close()후unlink()
shm = shared_memory.SharedMemory(create=True, size=n)
...
shm.close()
shm.unlink()
디버깅은 ls -lh /dev/shm와 ipcs -m로 바로 확인했다.
런타임 경고:
resource_tracker: There appear to be 1 leaked shared_memory objects
이 경고가 보이면 거의 100% 정리 순서 문제였다.
이번 주 기술 이슈 (문제-해결형)
Python 3.14 릴리즈 트랙(베타/RC/최종) 업데이트가 이어진 시기
- Python release page
- What’s New in Python 3.14
언어/런타임 업그레이드는 문법보다 C-API, wheel 호환성, CI 이미지 갱신에서 먼저 부딪힌다. 따라서 기능 확인보다 빌드 파이프라인의 의존성 핀 버전을 먼저 점검하는 게 안전하다. 특히 임베디드/엣지 환경은 시스템 Python과 충돌이 잦아 가상환경 재현 스크립트가 사실상 운영 문서 역할을 한다. 이 포스트의 트러블슈팅 포인트도 같은 맥락에서 유지했다.
참고
- Python
multiprocessing.shared_memory문서 - POSIX shared memory 개요