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 힙덤프 분석 시에 사용
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[정보] JVM 아키텍처 (0) | 2023.03.12 |
---|---|
[툴] 이클립스 MAT(Memory Analyzer) (0) | 2023.03.12 |
[Tips] Java에서 -XX:+PrintFlagsFinal 옵션 (0) | 2023.03.11 |
[Tips] 스레드 덤프 분석 툴/사이트 (0) | 2023.03.11 |
[Tips] 간단한 SSL Client/Server 작성 테스트 (0) | 2023.01.26 |