MAT을 활용한 HeapDump 분석
백엔드
MAT을 활용한 HeapDump 분석
두줄요약
K8s 환경에서 반복 재시작의 원인이 OOMKilled일 때 Heap Dump와 MAT로 원인을 추적하는 방법을 다뤘습니다. 로그로 보이지 않는 메모리 누수와 참조 관계를 분석해 DB I/O 병목까지 찾아내는 흐름을 설명했습니다.
문제 상황
- K8s 파드가 반복 재시작되며 Last State에 OOMKilled가 남는 상황
- 로그만으로는 원인 파악이 어려운 서서히 누적되는 메모리 문제
원인 분석
- JVM 힙에 객체가 계속 쌓이지만 강한 참조로 인해 GC 회수 실패
- 비동기 처리 과정의 DB I/O 병목으로 메시지 소비 속도가 생산 속도를 따라가지 못함
해결 방법
- Heap Dump로 특정 시점의 힙 객체와 참조 관계를 스냅샷으로 확보
- MAT의 Leak Suspects, Dominator Tree, Path to GC Roots로 누수 의심 객체 추적
주의할 점
- K8s에서 파드 종료 시 덤프 파일이 사라질 수 있어 영속 스토리지 경로 필요
- 자동 덤프 옵션과 수동 추출 방식의 운영 환경별 고려 필요
적용해볼 점
- OOM 발생 시 -XX:+HeapDumpOnOutOfMemoryError와 HeapDumpPath 설정
- Retained Heap이 큰 객체와 참조 경로를 우선 확인
