seukseok의 개인 블로그

Python 멀티프로세싱에서 shared_memory 누수 잡은 방법

· tech

비전 파이프라인에서 shared_memory 객체가 누수되어 메모리가 쌓이는 문제를 close/unlink 순서로 해결했다.

실시간 추론 파이프라인을 Python 멀티프로세싱으로 돌리는데, 몇 시간 뒤 OOM에 가까워졌다.

원인은 multiprocessing.shared_memory 정리 누락이었다. 프로세스가 죽어도 segment가 남아 /dev/shm가 계속 커졌다.

핵심은 라이프사이클 분리다.

shm = shared_memory.SharedMemory(create=True, size=n)
...
shm.close()
shm.unlink()

디버깅은 ls -lh /dev/shmipcs -m로 바로 확인했다.

런타임 경고:

resource_tracker: There appear to be 1 leaked shared_memory objects

이 경고가 보이면 거의 100% 정리 순서 문제였다.

이번 주 기술 이슈 (문제-해결형)

Python 3.14 릴리즈 트랙(베타/RC/최종) 업데이트가 이어진 시기

언어/런타임 업그레이드는 문법보다 C-API, wheel 호환성, CI 이미지 갱신에서 먼저 부딪힌다. 따라서 기능 확인보다 빌드 파이프라인의 의존성 핀 버전을 먼저 점검하는 게 안전하다. 특히 임베디드/엣지 환경은 시스템 Python과 충돌이 잦아 가상환경 재현 스크립트가 사실상 운영 문서 역할을 한다. 이 포스트의 트러블슈팅 포인트도 같은 맥락에서 유지했다.

참고