JProfiler 도움말

HPROF 및 PHD 힙 스냅샷

HotSpot JVM과 Android Runtime은 모두 HPROF 형식의 힙 스냅샷을 지원합니다. IBM J9 JVM은 이러한 스냅샷을 PHD 형식으로 작성합니다. PHD 파일에는 가비지 컬렉터 루트(garbage collector roots)가 포함되지 않으므로, JProfiler는 클래스를 루트로 시뮬레이션합니다. 따라서 PHD 파일로는 클래스로더 메모리 누수를 찾기 어려울 수 있습니다.

네이티브 힙 스냅샷은 프로파일링 에이전트 없이도 저장할 수 있으며, 범용 API의 제약 없이 저장되므로 JProfiler 힙 스냅샷보다 오버헤드가 적습니다. 반면에 네이티브 힙 스냅샷은 JProfiler 힙 스냅샷보다 지원하는 기능이 적습니다. 예를 들어 할당 기록 정보를 사용할 수 없으므로 객체가 어디에 할당되었는지 확인할 수 없습니다. HPROF 및 PHD 스냅샷은 일반 JProfiler 스냅샷을 열 때와 마찬가지로 JProfiler에서 Session→Open Snapshot을 통해 열 수 있습니다. 이 경우 힙 워커만 사용할 수 있으며 다른 모든 섹션은 회색으로 비활성화됩니다.

라이브 세션에서는 Profiling→Save HPROF Snapshot 또는 Profiling→Save PHD Snapshot 액션을 호출하여 HPROF/PHD 힙 스냅샷을 생성하고 열 수 있습니다. 오프라인 프로파일링의 경우 "Create an HPROF/PHD heap dump" 트리거 액션이 제공됩니다. 이 액션은 일반적으로 OutOfMemoryError가 발생할 때 HPROF 스냅샷을 저장하기 위해 "Out of memory exception" 트리거와 함께 사용됩니다.

이는 다음 VM 파라미터인

-XX:+HeapDumpOnOutOfMemoryError

에 해당하며 HotSpot JVM에서 지원됩니다.

실행 중인 시스템에서 HPROF 힙 덤프를 추출하는 또 다른 방법은 JDK에 포함된 명령줄 도구인 jmap을 사용하는 것입니다. 이 도구의 호출 구문인

jmap -dump:live,format=b,file=<filename> <PID>

은(는) 기억하기 어렵고 먼저 PID를 확인하기 위해 jps 실행 파일을 사용해야 합니다. JProfiler는 훨씬 더 편리한 대화형 명령줄 실행 파일인 bin/jpdump를 함께 제공합니다. 이 도구를 사용하면 프로세스를 선택할 수 있고, Windows에서 서비스로 실행 중인 프로세스에 연결할 수 있으며, 32비트/64비트가 혼합된 JVM 환경에서도 문제없이 작동하고, HPROF 스냅샷 파일 번호를 자동으로 매깁니다. 자세한 정보를 확인하려면 -help 옵션을 지정하여 실행하십시오.

프로파일링 에이전트를 로드하지 않고 HPROF 힙 스냅샷을 생성하는 기능은 JProfiler GUI에서도 지원됩니다. 로컬 또는 원격으로 프로세스에 attach할 때 언제든지 HPROF 힙 스냅샷만 생성할 수 있습니다.

HPROF 스냅샷에는 스레드 덤프가 포함될 수 있습니다. OutOfMemoryError의 결과로 HPROF 스냅샷이 저장된 경우, 스레드 덤프를 통해 오류 발생 시점에 애플리케이션의 어느 부분이 활성 상태였는지 파악할 수 있습니다. 오류를 트리거한 스레드는 특수 아이콘으로 표시됩니다.