본문 바로가기
JAVA

[ JAVA ] heap dump 분석 ( Out Of Memory 분석 )

by 정윤재 2021. 4. 1.

heap dump 를 분석 하기 위해선 보통 여러가지 tool 을 사용하는데

저는 가장 일반적으로 쓰이는 eclipse 기반으로 만들어진 mat 을 사용하여 분석 예제를

수행 하면서 분석을 공부해보도록 하겠습니다.

 

1.  https://www.eclipse.org/mat 에서 mat 를 다운로드 합니다.

2. ibm jvm 을 분석 하기 위한 플러그인은 

http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools/dtfj

 

Index of /ibmdl/export/pub/software/websphere/runtimes/tools/dtfj

 

public.dhe.ibm.com

에서 다운로드 받을 수 있습니다.

(다운로드 받아서 mat 의 plugins 폴더와 features 폴더에 넣어주세요)

 

3. mat 의 압축을 풉니다.

압축을 풀면 mat 라는 폴더가 있고 MemoryAnalyzer.exe 라는 실행 파일이 있어서 해당 파일을

실행 시켜주면 됩니다.

 

4. 분석 툴에서 사용할 수 있는 jvm 메모리 최대치를 조정 해 줍니다.

이클립스와 비슷합니다. mat 폴더의 MemoryAnalyzer.ini 파일을 수정하여 -Xmx 옵션을

수정 합니다.

(저는 보통 4096m 정도로 설정 합니다. dump 파일 크기에 따라 변경해 주세요)

 

 

5. MAT 을 실행 시키고 heap dump 파일 open

상단 File > Open Heap Dump... 을 선택 하여 로컬 디스크에 있는 heapdump

파일을 불러옵니다. (hprof 파일)

 

6. Getting Start 에서 그냥 Finish 버튼 클릭 하시면 됩니다.

 

7. Overview 탭
- overview 화면은 덤프 파일을 1차로 분석한 화면 입니다.

 

8. Leak suspect 탭

보통은 leak suspect 탭을 잘 살펴보면 원인 분석 및 유추가 가능하지만
heap 내용을 상세히 알아보고 싶다면 아래 내용을 따라 오시면 됩니다.
(이해하기 쉽도록 jeus 의 예로 소개 해 드립니다.)

 

 

9. see stacktrace 화면

 

10. open dominator tree 버튼 클릭 화면

 

11. request 상세 정보 탐색

object 를 go into 로 내부 내용을 탐색 하여 상세 정보를 얻을 수 있습니다.

 

12. 위의 예제 분석 결과

- 문제가 되는 호출은 /mpro/main_blank.jsp 이다.

- 정확하진 않지만 remoteAddr 항목을 통해 사용자 IP 유추가 유추 가능하다. 

- apache poi 를 사용하는 것으로 보아 excel 데이터를 사용할 때 너무 많은 메모리를 사용한다.

- 그밖에 db 연결 하는 dao class 등을 확인 할 수 있다.

 

13. 일반적인 out of memory 발생 하는 예

- db 에서 대량의 데이터를 조회 하는 경우 (resultset 클래스 등이 보임)

  해결 방법 : select 조건 제한

- 다량의 데이터에 대한 excel 파일 생성 및 read

   해결 방법 : excel 파일을 쪼개거나 조건 제한 해서 데이터 조절

- 대량의 파일 업로드

   해결 방법 : 파일 업로드 파일 사이즈 제한

 

일반적인 heap dump 분석 예를 정리 하여 보았습니다.

많은 분들께 도움이 되길 바랍니다.

 


댓글