1. Heap Dump 개념소개

- Heap dump 는 FullGC를 유발한 문제발생시점 Object를 확인할 수 있는 Heap Memory 스냅샷이다

- JVM 가동시 HeapDumpOnOutOfMemroyError 옵션을 추가하면, OOME 발생시 자동으로 파일이 생성된다.

수동으로 파일을 만들기 위해서는 아래와 같이 jmap을 사용해서 수행한다.

jmap -dump:format=b,file=/home/webwas/heapdump_`date +’%y%m%d_%H%M%S’`.hprof {PID}

- JVM 옵션으로 DUMP생성 위치를 지정할 수도 있으며, 별도 지정 없으면 도메인 홈 디렉토리에 생성된다. (파일명 규칙 : java_pidXXXX.hprof)

- 발생된 heap dump 는 JVM 옵션 사이즈에 따라 생성되니, 2GB 이상 파일은 분석하고자 하는 PC 메모리가 여유로운지 확인 필요하다

- Heap Dump를 분석할 수 있는 툴은 여러 가지가 있으나, MAT(Eclipse memory Analyze)를 이용하여 분석하고자 한다.

- 해당 파일은 구글링하여 PC에 다운받거나, 분석 전용 서버를 통해 분석한다.

2. MAT 실행방법

MemoryAnalyzer.ini 파일에서 JVM 경로,크기 등 설정 후 MemoryAnalyzer.exe를 실행한다.

 MemoryAnalyzer.ini 설정파일

-startup
plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.200.v20210429-1609
-vm
D:\mat\jdk-17\bin
-vmargs
-Xms2048m
-Xmx2048m

실행이후 하단에 보이는 Open a Heap Dump 버튼을 눌러서 java_pidxxxxx.hprof 파일을 선택하고,

이후 Leak Suspects Report를 선택하고 Finish를 클릭한다.

3. Heap Dump 분석방법

아래와 같이 System overview를 통해 Leak 발생시킨 기본 정보를 도출할 수 있다.

Reports > Leak Suspects 메뉴을 통해 아래 내용을 정확하게 확인해본다.

아래와 같이 각 suspect별 상세 내용 확인

  • 각 Suspect별 Details 클릭해본다.
  • 각 Problem Suspect 를 클릭 > List objects > with outgoing references
  • 해당 request 관련 call tree를 볼 수 있음. 각 object별 retained heap 확인 가능. Retained heap : 이 클래스의 모든 인스턴스로 인해 유지되는 총 메모리 크기(byte)
  • . With outgoing references : 해당 object가 참조하고 있는 object 포함하여 보여줌
  • Call tree 2~3 level로 drill down하면 관련 IP/SQL/Servlet Path 등도 추적 가능한 경우 있다.

태그: ,

카테고리:

업데이트:

댓글남기기