핵심 요약
여기어때가 Docker 컨테이너에서 JVM 힙은 정상인데 메모리가 터지는 현상을 분석했다. Native Memory Tracking(NMT)로 네이티브 메모리의 영향과 OOM Killer의 작동 원리를 파악했고, 9GB대 커밋 vs 14GB RSS 차이를 확인했다. 다음 편에서 jemalloc/jeprof로 네이티브 malloc 경로를 추적한다.
구현 방법
- 네이티브 메모리 추적: -XX:NativeMemoryTracking=detail로 baseline과 summary.diff 비교
- 메모리 측정 기준 이해: JVM 힙(-Xmx)과 NMT, cgroup RSS 구분
- 시도 내용 요약: GC 로그/ Undertow 로그 비활성화, 컨테이너 메모리 제한 명시, JVM 버전 변경 등 다수 시도하였으나 뚜렷한 해결은 미확정
주요 결과
- NMT Total: reserved=9,621MB, committed=8,919MB; 힙은 8,192MB로 확인, top의 RSS는 14GB로 약 5GB 차이 존재
- 컨테이너가 OOM Killer에 의해 종료되는 현상 재확인; 힙은 문제가 없으나 네이티브 메모리 증가로 인한 문제로 판단
- Part 2에서 native malloc 경로 추적 및 RSS 감소 효과를 다룸

