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
에서 다운로드 받을 수 있습니다.
(다운로드 받아서 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 분석 예를 정리 하여 보았습니다.
많은 분들께 도움이 되길 바랍니다.
'JAVA' 카테고리의 다른 글
[ JAVA ] java.lang.StackOverflowError (0) | 2019.11.27 |
---|---|
[JAVA] JVM 설치 bit 확인 하기 (0) | 2019.04.14 |
[ JAVA ] Windows JAVA 설치 (0) | 2015.01.14 |
[ JAVA ] java.util.zip.ZipException: invalid entry size (expected xxxxx but got 0 bytes) (0) | 2014.10.22 |
[ JAVA ] JAVA system 지원 font (2) | 2013.06.25 |
댓글