프로그래밍 언어/JAVA

[정보] 힙덤프(HeapDump) 이해

투칼론 2023. 3. 11. 14:48
반응형

1. 힙 덤프(Heap Dump) 란?

클래스의 인스턴스를 생성하여 Java 객체를 생성할 때마다 항상 힙이라는 영역에 배치됩니다. Java 런타임의 클래스도 이 힙에서 생성됩니다. JVM이 시작될 때 힙이 생성됩니다. 애플리케이션에서 생성되거나 소멸된 개체를 수용하기 위해 런타임 동안 확장되거나 축소됩니다.

힙이 가득 차면 더 이상 참조되지 않는(즉, 더 이상 사용되지 않는) 개체를 수집하기 위해 가비지 수집 프로세스(Garbage Collector Process)가 실행됩니다. 

 

힙 덤프에는 Java 힙에서 실행 중인 Java 애플리케이션이 사용 중인 모든 활성 객체(Objects)의 스냅샷이 포함됩니다. 주소, 유형, 클래스 이름 또는 크기와 같은 각 개체 인스턴스에 대한 자세한 정보와 인스턴스에 다른 개체에 대한 참조가 있는지 여부를 얻을 수 있습니다.

 

자바 Heap 메모리 구조는 JVM 마다 다를 수 있습니다. 예를 들어 Oracle HotSpot과 IBM JVM의 힙 구조는 다릅니다.

 

2. 힙덤프 생성 방법

1) kill -3 [JVM PID]

    (IBM)     $ export  IBM_HEAPDUMP=true 또는 export  IBM_HEAP_DUMP=true 옵션 설정 필요

 

2) OutOfMemory 발생 시에 자동 생성

    (Oracle) $ java -XX:+HeapDumpOnOutOfMemoryError  별도 옵션 설정 필요

    (IBM)     $ export IBM_JAVADUMP_OUTOFMEMORY=true 설정 필요

 

3) jmap 명령어 

    $ jmap -dump:live,format=b,file=/tmp/dump.hprof  [JVM PID]

 

3. 힙덤프 파일 위치 및 확장자

1) 힙덤프 파일 생성 위치

    (Oracle) $ java -XX:+HeapDumpPath=[디렉터리]  위치에 생성됨

    (IBM)     $ export IBM_HEAPDUMPDIR=[디렉터리]  위치에 생성됨

 

2) 힙덤프 파일 확장자

   Oracle HotSpot은 확장자 .HPROF로 생성되고, IBM JVM의 Heap Dump는 .PHD로 생성됩니다. 

 

4. 힙덤프 분석 방법

1) Eclipse MAT

    (매뉴얼) https://www.eclipse.org/mat/documentation/

 

2) IBM Heap Analyzer 

    : 주로 IBM JVM 힙덤프 분석 시에 사용