HPROF 및 PHD 힙 스냅샷
HotSpot JVM과 Android Runtime은 모두 HPROF 형식의 힙 스냅샷을 지원하며, IBM J9 JVM은 PHD 형식으로 이러한 스냅샷을 작성합니다. PHD 파일은 가비지 컬렉터 루트를 포함하지 않으므로, JProfiler는 클래스를 루트로 시뮬레이션합니다. PHD 파일로 클래스 로더 메모리 누수를 찾는 것은 어려울 수 있습니다.
네이티브 힙 스냅샷은 프로파일링 에이전트 없이 저장할 수 있으며, 일반적인 API의 제약 없이 저장되기 때문에 JProfiler 힙 스냅샷보다 오버헤드가 낮습니다. 반면에, 네이티브 힙 스냅샷은 JProfiler 힙 스냅샷보다 기능이 적습니다. 예를 들어, 할당 녹화 정보가 제공되지 않으므로 객체가 어디에 할당되었는지 볼 수 없습니다. HPROF 및 PHD 스냅샷은 세션→스냅샷 열기에서 JProfiler 스냅샷을 여는 것처럼 JProfiler에서 열 수 있습니다. 힙 워커만 사용할 수 있으며, 다른 모든 섹션은 회색으로 표시됩니다.
라이브 세션에서는
프로파일링→HPROF/PHD 힙 스냅샷 저장을 호출하여 HPROF/PHD 힙 스냅샷을 생성하고 열 수 있습니다.
오프라인 프로파일링의 경우 "HPROF 힙 덤프 생성" 트리거 액션이 있습니다.
이는 일반적으로 "메모리 부족 예외" 트리거와 함께 사용되어
OutOfMemoryError
가 발생할 때 HPROF 스냅샷을 저장합니다.
이는 VM 매개변수 에 해당합니다.
-XX:+HeapDumpOnOutOfMemoryError
이는 HotSpot JVM에서 지원됩니다.
실행 중인 시스템에서 HPROF 힙 덤프를 추출하는 또 다른 방법은 JRE의 일부인 명령줄 도구
을 사용하는 것입니다. 그 호출 구문은
jmap
jmap -dump:live,format=b,file=<filename> <PID>
기억하기 어렵고 PID를 먼저 찾기 위해 실행 파일을 사용해야 합니다.
JProfiler는 대화형 명령줄 실행 파일
jps
을 제공하여 훨씬 더 편리합니다. 프로세스를 선택할 수 있으며, Windows에서 서비스로 실행 중인 프로세스에 연결할 수 있고,
혼합된 32비트/64비트 JVM에서도 문제가 없으며, HPROF 스냅샷 파일을 자동으로 번호 매깁니다. 더 많은 정보를 얻으려면
bin/jpdump
-help
옵션으로 실행하십시오.
프로파일링 에이전트를 로드하지 않고 HPROF 힙 스냅샷을 찍는 것도 JProfiler GUI에서 지원됩니다. 프로세스에 로컬 또는 원격으로 attach할 때, 항상 HPROF 힙 스냅샷을 찍을 수 있는 가능성이 있습니다.
HPROF 스냅샷은 스레드 덤프를 포함할 수 있습니다. HPROF 스냅샷이
OutOfMemoryError
의 결과로 저장된 경우, 스레드 덤프는 오류 당시 애플리케이션의 어느 부분이
활성화되었는지를 전달할 수 있습니다. 오류를 트리거한 스레드는 특별한 아이콘으로 표시됩니다.