PHpullh
학습 라이브러리/Java/힙 덤프 분석

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+ 파일이 생성되므로 디스크 여유 공간을 확인하세요.