목록 보기
MAT을 활용한 HeapDump 분석
백엔드

MAT을 활용한 HeapDump 분석

넥스트리
넥스트리
2026년 6월 26일

두줄요약

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이 큰 객체와 참조 경로를 우선 확인

다음 읽기

#Kubernetes 주제를 이어서 읽기

JVM Heap 설정과 OOMKilled

Kubernetes Pod의 OOMKilled 원인을 Memory Limit만으로 보지 않고 JVM Heap 설정까지 함께 점검했습니다. MaxRAMPercentage를 낮추자 Full GC가 정상 동작하며 재시작 문제가 해소됐습니다.

넥스트리
넥스트리
데브옵스

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...