Eclipse Memory Analyzer (MAT)

phantom0308
4 min readOct 13, 2021

--

갑작스런 서버 다운이 되었을 때, WAS 로그 분석, DB 커넥션 등 여러가지 확인을 한다. 그 중, OOME(Out of Memory Exception)에 대해서 확인이 필요할 때가 있다.

Eclipse Memory Analyzer (이하 MAT)은 JVM 의 메모리 누수를 잡기 위한 힙 덤프 분석 툴이다.

기본적으로 JAVA 메모리 누수를 잡기 위해서는, 아래와 같은 명령어로 heap 덤프를 수동 생성 시킬 수 있다.

~]$ jps -v 
OR
~]$ ps -ef | grep java
로 PID 검색~]$ jmap -dump:format=b,file=<파일명><PID>

jps 명령어는 현재 서버의 실행 중인 JVM 프로세스 상태를 나타내주며, jmap 을 통해서 프로세스의 덤프를 생성시킬 수 있다.

이 외에 실시간으로도 heap의 상태를 조회 할 수 있다.(root 권한 필요)

또는 프로그램 실행 시, 아래와 같은 옵션을 통해 OOME 발생 시, JVM을 시작한 디렉토리(default)에 Heap Dump 파일(.hprof/.bin)파일이 자동으로 생성된다.

-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=./jvm.hprof

이 외에도 , 아래와 같은 명령어로 덤프를 생성할 수 있다.(kill은 안되던데..)

kill -3 <pid>
jstack <pid> > <filename>

jstack 경우 부하가 kill -3 보다 있다고 한다. CPU 가 100% 인 상황에선 아무래도 kill -3 을 권장한다.

MAT 실행(설치 및 세팅은 생략..)

설치 후 MemoryAnalyzer.ini 에 설정만 추가하였다.

MemoryAnalyzer.exe 를 실행한 후, File — Open Heap Dump를 선택하여 heap 덤프 파일을 열어보자.

Leak Suspects Report 선택 후, Finish

아래 Problem Suspect의 Detail을 클릭하여Biggest Instances, Reference Pattern 등 상세한 내역을 확인 할 수있다.

incoming은 해당 object를 참조하는 object, outgoing은 해당 object가 참조하고 있는 object를 포함하여 보여준다.

자세한 설명은 Eclipse MAT — incoming, outgoing references를 참고 분석한다.

해당 글에서는 heap 덤프 생성 및 MAT 사용 분석에 대한 글이므로, troubleshooting 해결에 관한 글은 다른 페이지에서 다룰 예정이다.

--

--