지금까지는 JProfiler GUI가 프로파일된 JVM 내부에서 실행 중인 프로파일링 에이전트로부터 데이터를 가져오는 라이브 session만 살펴보았습니다. JProfiler는 모든 프로파일링 데이터를 파일에 기록하는 스냅샷도 지원합니다. 이는 여러 시나리오에서 유용할 수 있습니다:
- 예를 들어 테스트의 일부로 프로파일링 데이터를 자동으로 녹화하여 JProfiler GUI로 연결하는 것이 불가능한 경우.
- 서로 다른 프로파일링 session의 프로파일링 데이터를 비교하거나 이전 녹화를 확인하려는 경우.
- 프로파일링 데이터를 다른 사람과 공유하려는 경우.
스냅샷에는 힙 스냅샷을 포함한 모든 녹화의 데이터가 포함됩니다. 디스크 공간을 절약하기 위해 스냅샷은 압축되며, 직접 메모리 매핑을 위해 비압축 상태를 유지해야 하는 힙 워커 데이터는 예외입니다.
JProfiler GUI에서 스냅샷 저장 및 열기
라이브 session을 프로파일링하는 동안 Save Snapshot 툴바 버튼으로 스냅샷을 생성할 수 있습니다. JProfiler는 원격 에이전트에서 모든 프로파일링 데이터를 가져와 ".jps" 확장자를 가진 로컬 파일로 저장합니다. 라이브 session이 진행되는 동안 여러 스냅샷을 저장할 수 있습니다. 스냅샷은 자동으로 열리지 않으며 계속 프로파일링할 수 있습니다.
저장된 스냅샷은 File→Recent Snapshots 메뉴에 자동으로 추가되므로 방금 저장한 스냅샷을 편리하게 열 수 있습니다. 라이브 session이 아직 실행 중인 상태에서 스냅샷을 열면 라이브 session을 종료하거나 다른 JProfiler 창을 열지 선택할 수 있습니다.
JProfiler의 스냅샷 비교 기능을 사용하면 현재 라이브 session에서 저장한 모든 스냅샷으로 목록이 채워집니다. 이를 통해 서로 다른 사용 사례를 쉽게 비교할 수 있습니다.
일반적으로 메인 메뉴에서 Session→Open Snapshot을 실행하거나 파일 관리자에서 스냅샷 파일을 더블 클릭하여 스냅샷을 열 수 있습니다. JProfiler의 IDE 통합 기능은 IDE 자체의 일반 Open File 액션을 통해 JProfiler 스냅샷 열기도 지원합니다. 이 경우 내장 소스 코드 뷰어 대신 IDE로의 소스 코드 탐색이 제공됩니다.
스냅샷을 열면 모든 녹화 액션이 비활성화되고 녹화된 데이터가 있는 뷰만 사용할 수 있습니다. 어떤 종류의 데이터가 녹화되었는지 확인하려면 상태 표시줄의 녹화 레이블 위에 마우스를 올려놓으세요.
단기 실행 프로그램 프로파일링
라이브 session의 경우 모든 프로파일링 데이터는 프로파일된 JVM의 프로세스에 존재합니다. 따라서 프로파일된 JVM이 종료되면 JProfiler의 프로파일링 session도 함께 닫힙니다. JVM이 종료될 때 계속 프로파일링하려면 두 가지 옵션이 있으며, 둘 다 session 시작 다이얼로그에서 활성화할 수 있습니다.
- JVM이 실제로 종료되는 것을 막고 JProfiler GUI가 연결되어 있는 동안 인위적으로 살아있는 상태로 유지할 수 있습니다. IDE에서 테스트 케이스를 프로파일링하면서 IDE의 테스트 콘솔에서 상태와 총 시간을 확인하려는 경우에는 바람직하지 않을 수 있습니다.
- JVM이 종료될 때 스냅샷을 저장하고 즉시 해당 스냅샷으로 전환하도록 JProfiler에 요청할 수 있습니다. 스냅샷은 임시적이며 먼저 Save Snapshot 액션을 사용하지 않으면 session을 닫을 때 삭제됩니다.
trigger를 사용한 스냅샷 저장
자동화된 프로파일링 session의 최종 결과는 항상 하나 또는 일련의 스냅샷입니다. trigger에서 "Save a snapshot" 액션을 추가하여 프로파일된 JVM이 실행 중인 머신에 스냅샷을 저장할 수 있습니다. 라이브 session 중에 trigger가 실행되면 스냅샷은 원격 머신에도 저장되며 이미 JProfiler GUI로 전송된 데이터의 일부가 포함되지 않을 수 있습니다.
trigger를 사용하여 스냅샷을 저장하는 두 가지 기본 전략이 있습니다:
- 테스트 케이스의 경우 "JVM startup" trigger에서 녹화를 시작하고 JVM이 종료될 때 스냅샷을 저장하는 "JVM exit" trigger를 추가하세요.
- "CPU load threshold" trigger와 같은 예외적인 조건이나 "Timer trigger"를 사용한 주기적 프로파일링의 경우 중간에 "Sleep" 액션을 두고 일부 데이터를 녹화한 후 스냅샷을 저장하세요.
HPROF 힙 스냅샷
힙 스냅샷을 찍는 것이 너무 많은 오버헤드를 발생시키거나 메모리를 너무 많이 소비하는 상황에서는 JVM이 내장 기능으로 제공하는 HPROF 힙 스냅샷을 사용할 수 있습니다. 이 작업에는 프로파일링 에이전트가 필요하지 않으므로 프로덕션 환경에서 실행 중인 JVM의 메모리 문제를 분석하는 데 유용합니다.
JProfiler에서 이러한 스냅샷을 얻는 세 가지 방법이 있습니다:
- 라이브 session의 경우 JProfiler GUI는 메인 메뉴에서 HPROF 힙 덤프를 trigger하는 액션을 제공합니다.
-
JProfiler에는
OutOfMemoryError가 발생할 때 HPROF 스냅샷을 저장하는 특별한 "Out of memory exception" trigger가 있습니다. 이는 HotSpot JVM에서 지원하는 VM 파라미터-XX:+HeapDumpOnOutOfMemoryError
에 해당합니다. -
JDK의 jmap 실행 파일을 사용하여 실행 중인 JVM에서 HPROF 힙 덤프를 추출할 수 있습니다.
JProfiler에는 jmap보다 더 다양한 기능을 제공하는 커맨드 라인 도구
jpdump가 포함되어 있습니다. 프로세스를 선택할 수 있고, Windows에서 서비스로 실행 중인 프로세스에 연결할 수 있으며, 32비트/64비트 혼합 JVM에서도 문제없이 작동하고 HPROF 스냅샷 파일에 자동으로 번호를 매깁니다. 자세한 내용은-help옵션으로 실행하세요.
JDK Flight Recorder 스냅샷
JProfiler는 Java Flight Recorder (JFR)로 저장된 스냅샷 열기를 완전히 지원합니다. 이 경우 UI는 JFR의 기능에 맞게 조정되어 눈에 띄게 다릅니다. 자세한 내용은 JFR 도움말 항목을 참조하세요.
AI 에이전트를 사용한 스냅샷 분석
JProfiler의 MCP 서버는 AI 에이전트에 의한 분석을 위해 JProfiler 스냅샷(.jps), HPROF 파일(.hprof), PHD 파일(.phd) 및 JFR 녹화(.jfr)를 로드할 수 있습니다. 이는 JProfiler GUI로 스냅샷을 녹화한 후 AI 에이전트가 데이터를 분석하도록 하는 복잡한 프로파일링 시나리오에 유용합니다. 동일한 유형의 스냅샷 두 개를 기준선 비교를 위해 함께 로드할 수 있습니다.















