JAVA · 성능/JVM
힙 덤프 분석
힙 덤프를 생성하고 메모리 사용을 분석하는 방법입니다.
성능/JVM고급HeapDumpMATOOM메모리분석
핵심 설명
힙 덤프를 생성하고 메모리 사용을 분석하는 방법입니다.
Java code
// 힙 덤프 생성 방법
// 1. OOM 시 자동 생성
// java -XX:+HeapDumpOnOutOfMemoryError
// -XX:HeapDumpPath=/tmp/heap.hprof MyApp
// 2. 수동 생성
// jcmd <pid> GC.heap_dump /tmp/heap.hprof
// jmap -dump:format=b,file=/tmp/heap.hprof <pid>
// 3. 프로그래밍 방식
import com.sun.management.HotSpotDiagnosticMXBean;
import java.lang.management.ManagementFactory;
public class HeapDumpAnalysis {
static void dumpHeap(String path, boolean live) throws Exception {
HotSpotDiagnosticMXBean bean = ManagementFactory
.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
bean.dumpHeap(path, live); // live=true: GC 후 덤프
}
public static void main(String[] args) throws Exception {
// 의도적 메모리 사용
java.util.List<byte[]> leak = new java.util.ArrayList<>();
for (int i = 0; i < 100; i++) {
leak.add(new byte[1024 * 1024]); // 1MB씩
}
System.out.println("메모리 사용: " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory()) / 1024 / 1024 + "MB");
// 분석 도구:
// - Eclipse MAT (Memory Analyzer Tool)
// - VisualVM
// - JDK Mission Control
System.out.println("분석 도구: Eclipse MAT, VisualVM, JMC");
System.out.println("MAT의 Leak Suspects 리포트가 가장 유용합니다.");
}
}학습 팁
-XX:+HeapDumpOnOutOfMemoryError는 운영 환경에서 필수 옵션입니다. OOM 발생 시 원인 분석의 유일한 단서가 됩니다.
주의할 점
힙 덤프는 힙 크기만큼 디스크를 사용합니다. 4GB 힙이면 4GB+ 파일이 생성되므로 디스크 여유 공간을 확인하세요.
자주 묻는 질문
힙 덤프 분석란 무엇인가요?
힙 덤프를 생성하고 메모리 사용을 분석하는 방법입니다.
힙 덤프 분석 학습 시 주의할 점은 무엇인가요?
힙 덤프는 힙 크기만큼 디스크를 사용합니다. 4GB 힙이면 4GB+ 파일이 생성되므로 디스크 여유 공간을 확인하세요.