Cute Light Pink Flying Butterfly OOM 분석 | heap dump 파일분석 - VisualVM, Eclipse MAT :: 놀면서 돈벌기
본문 바로가기
Coding/Back-end

OOM 분석 | heap dump 파일분석 - VisualVM, Eclipse MAT

by 왓츠뉴 whatsnew 2025. 4. 1.
반응형

 

 

heap이 증가하면서 hang이 발생한 상황에서 log만으로 분석이 어려운 상황일 때

heap dump 파일을 생성하여 메모리누수 원인을 파악해보겠습니다.


📌1. 메모리 누수 발생

grafana, visualVM으로 분석도중 GC가 메모리를 정리하지 못하고

heap 메모리가 과도하게 늘어나는것을 발견했습니다.

물론 이러다가 설정한 GC Config의 max 수치를 넘어가면 프로세스에서

hang이 발생하면서 멈춰버립니다.



📌2.  visualVM 프로그램 - Heap Dump 파일생성

visualVM 프로그램에서 Heap Dump 파일을 띄워봅니다.
Monitor 탭에서 'Heap Dump' 버튼을 클릭하면

분석파일이 프로세스가 실행되고 있는 서버의 /tmp 하위에 저장됩니다.


주의할 점은 프로세스가 종료되면 visualVM도 함께 멈추면서 heapdump 파일을 띄울 수 없으니,

OOM이 발생하기전에 어느정도 분석이 가능한 시점에 heapdump를 생성합니다.

 

📌3.  scp로 서버에서 로컬로 파일이동

HeapDump 파일을 scp로 로컬로 받아옵니다.
1) 검증서버에서 게이트웨이로 전송


  
cd /tmp
scp -P 9922 hura@172.31.1.145:/tmp/heap* .
계정 암호입력

 

2) 로컬에서 게이트웨이의 파일을 가져옴


  
scp -P 2922 herit@13.209.109.59:/home/herit/heap* .
계정 암호입력

 

📌4. Eclipse MAT 다운로드

HeapDump 파일을 분석할 수 있는 EclipseMAT 프로그램입니다.
다운로드 링크 : https://eclipse.dev/mat/download/previous/
버전 : 1.8.1 (JDK 버전 동일하지않으면 실행되지 않습니다)

 

📌5. EclipseMAT 실행

EclipseMAT을 실행하고 로컬로 받아온 heapdump 파일을 열어줍니다.(.hprof)
프로그램명 : MemoryAnalyzer.exe
실행경로 : \MemoryAnalyzer-1.8.1.20180910-win32.win32.x86_64\mat

 

📌6. 분석방법


- Suspect로 분석된 부분이 주 원인입니다.
- Problem Suspect라고 적혀진 노란창의 Details를 클릭하면 상세한 분석내용이 조회됩니다.
- Suspect로 분석된 부분을 파악하여 관련부분 코드를 수정합니다.
- Suspect는 하나뿐 아니라 여러개로 발견될 수 있습니다.



저의 경우에는 통계개선코드를 추가하는 과정에서
KafkaConsumer에 추가했던 테스트용 코드를 지우는 것을 깜빡했는데요.
add문이 consume을 받을때마다 쌓이면서, Eclipse MAT 프로그램 분석결과에서도
KafkaConsumer에 너무 많은 객체가 쌓이고 있다고 분석되었습니다.


  
Problem Suspect 1
One instance of "net.herit.ami.features.batch.kafka.KafkaConsumer" loaded by "org.springframework.boot.loader.LaunchedURLClassLoader @ 0xea660000" occupies 173,270,328 (83.54%) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "<system class loader>".
Keywords
org.springframework.boot.loader.LaunchedURLClassLoader @ 0xea660000
java.lang.Object[]
net.herit.ami.features.batch.kafka.KafkaConsumer

 

 

 

 

KafkaConsumer 코드 개선 이후

GC가 정상적으로 Heap Memory를 감당하는중

 

 


 

- 분석방법 참조


https://incheol-jung.gitbook.io/docs/q-and-a/java/heap-dump-feat.-oom
https://shonm.tistory.com/646
https://blog.yevgnenll.me/posts/heap-dump-out-of-memory
https://blueyikim.tistory.com/1242

 

 

 

728x90
반응형