「프로그램이 메모리 폭주한다」 — CPU와 마찬가지로 메모리도 「어디서 많이 먹는지」 측정해야 해결됩니다.
memory_profiler가 줄 단위로 메모리 사용량을 추적합니다.
기본 사용.
pip install memory_profiler.
함수에 @profile 데코레이터 추가(memory_profiler에서 import).
python -m memory_profiler script.py로 실행 — 줄별 메모리 변화 출력.
결과 읽기.
Mem usage(현재 메모리), Increment(이 줄에서 늘어난 양), Line Contents.
「어느 줄에서 메모리가 폭증했는가」 즉시 식별.
큰 리스트 생성, 데이터프레임 복사 같은 부분이 발견됨.
tracemalloc — 표준 라이브러리.
import tracemalloc.
tracemalloc.start().
snap = tracemalloc.take_snapshot().
메모리 누수 추적, 어느 코드가 얼마나 할당했는지 통계.
외부 의존성 없이 사용 가능.
메모리 절약 패턴.
1) 큰 리스트 대신 제너레이터(yield).
2) numpy·pandas로 효율적 자료구조.
3) __slots__로 인스턴스 메모리 감축.
4) gc.collect()는 보통 자동, 큰 객체 명시 del 후 호출 가능.
한 줄 요약
memory_profiler는 줄별 메모리 추적.
@profile + python -m memory_profiler.
tracemalloc은 표준 대안.
제너레이터·__slots__·numpy로 메모리 절약 패턴.
더 알아볼 것
- pympler — 객체 크기 측정
- gc 모듈 — 가비지 컬렉터 제어
- 객체 그래프 분석 — objgraph