JProfiler 도움말Download

스냅샷


지금까지 우리는 JProfiler GUI가 프로파일된 JVM 내부에서 실행 중인 프로파일링 에이전트로부터 데이터를 얻는 라이브 세션만 살펴보았습니다. JProfiler는 또한 모든 프로파일링 데이터를 파일에 기록하는 스냅샷을 지원합니다. 이는 여러 시나리오에서 유리할 수 있습니다:

  • 예를 들어 테스트의 일부로 프로파일링 데이터를 자동으로 기록하여 JProfiler GUI와 연결할 수 없는 경우.
  • 다른 프로파일링 세션의 프로파일링 데이터를 비교하거나 이전 녹화를 보고 싶은 경우.
  • 다른 사람과 프로파일링 데이터를 공유하고 싶은 경우.

스냅샷에는 힙 스냅샷을 포함한 모든 녹화의 데이터가 포함됩니다. 디스크 공간을 절약하기 위해 스냅샷은 압축되며, 힙 워커 데이터는 직접 메모리 매핑을 허용하기 위해 압축되지 않은 상태로 유지됩니다.

JProfiler GUI에서 스냅샷 저장 및 열기

라이브 세션을 프로파일링할 때 스냅샷 저장 도구 모음 버튼으로 스냅샷을 생성할 수 있습니다. JProfiler는 원격 에이전트로부터 모든 프로파일링 데이터를 가져와 ".jps" 확장자를 가진 로컬 파일에 저장합니다. 라이브 세션 동안 여러 개의 스냅샷을 저장할 수 있습니다. 이들은 자동으로 열리지 않으며 프로파일링을 계속할 수 있습니다.

저장된 스냅샷은 파일→최근 스냅샷 메뉴에 자동으로 추가되어 방금 저장한 스냅샷을 편리하게 열 수 있습니다. 라이브 세션이 여전히 실행 중일 때 스냅샷을 열면 라이브 세션을 종료하거나 다른 JProfiler 창을 열 수 있습니다.

JProfiler에서 스냅샷 비교 기능을 사용할 때, 현재 라이브 세션에 대해 저장한 모든 스냅샷으로 목록이 채워집니다. 이를 통해 다양한 사용 사례를 쉽게 비교할 수 있습니다.

일반적으로, 메인 메뉴에서 세션→스냅샷 열기를 호출하거나 파일 관리자에서 스냅샷 파일을 더블 클릭하여 스냅샷을 열 수 있습니다. JProfiler의 IDE 통합은 IDE 자체의 일반적인 파일 열기 동작을 통해 JProfiler 스냅샷 열기를 지원합니다. 이 경우, 내장된 소스 코드 뷰어 대신 IDE로 소스 코드 탐색을 할 수 있습니다.

스냅샷을 열면 모든 녹화 작업이 비활성화되고 녹화된 데이터가 있는 뷰만 사용할 수 있습니다. 어떤 종류의 데이터가 녹화되었는지 알아보려면 상태 표시줄의 녹화 레이블 위에 마우스를 올려보세요.

단명 프로그램 프로파일링

라이브 세션의 경우, 모든 프로파일링 데이터는 프로파일된 JVM의 프로세스에 존재합니다. 따라서 프로파일된 JVM이 종료되면 JProfiler의 프로파일링 세션도 종료됩니다. JVM이 종료될 때 프로파일링을 계속하려면 세션 시작 대화 상자에서 활성화할 수 있는 두 가지 옵션이 있습니다.

  • JVM이 실제로 종료되지 않도록 하고 JProfiler GUI가 연결되어 있는 한 인위적으로 활성 상태를 유지할 수 있습니다. 이는 IDE에서 테스트 케이스를 프로파일링하고 IDE의 테스트 콘솔에서 상태와 총 시간을 보고 싶을 때 바람직하지 않을 수 있습니다.
  • JVM이 종료될 때 JProfiler에게 스냅샷을 저장하고 즉시 전환하도록 요청할 수 있습니다. 스냅샷은 임시이며 세션을 닫을 때 스냅샷 저장 작업을 먼저 사용하지 않으면 삭제됩니다.

트리거로 스냅샷 저장

자동화된 프로파일링 세션의 최종 결과는 항상 스냅샷 또는 일련의 스냅샷입니다. 트리거에서는 "스냅샷 저장" 작업을 추가하여 프로파일된 JVM이 실행 중인 머신에 스냅샷을 저장할 수 있습니다. 라이브 세션 중에 트리거가 실행되면 스냅샷은 원격 머신에도 저장되며 이미 JProfiler GUI로 전송된 데이터의 일부를 포함하지 않을 수 있습니다.

트리거로 스냅샷을 저장하는 두 가지 기본 전략이 있습니다:

  • 테스트 케이스의 경우, "JVM 시작" 트리거에서 녹화를 시작하고 JVM이 종료될 때 스냅샷을 저장하는 "JVM 종료" 트리거를 추가합니다.
  • "CPU 부하 임계값" 트리거와 같은 예외적인 조건이나 "타이머 트리거"를 사용한 주기적인 프로파일링의 경우, 중간에 "슬립" 작업으로 데이터를 녹화한 후 스냅샷을 저장합니다.

HPROF 힙 스냅샷

힙 스냅샷을 찍는 것이 너무 많은 오버헤드를 발생시키거나 메모리를 너무 많이 소비하는 상황에서는 JVM이 제공하는 내장 기능인 HPROF 힙 스냅샷을 사용할 수 있습니다. 이 작업에는 프로파일링 에이전트가 필요하지 않기 때문에, 프로덕션에서 실행 중인 JVM의 메모리 문제를 분석하는 데 흥미롭습니다.

JProfiler를 사용하면 다음과 같은 세 가지 방법으로 이러한 스냅샷을 얻을 수 있습니다:

  • 라이브 세션의 경우, JProfiler GUI는 메인 메뉴에서 HPROF 힙 덤프를 트리거하는 작업을 제공합니다.

  • JProfiler에는 OutOfMemoryError가 발생할 때 HPROF 스냅샷을 저장하는 특별한 "메모리 부족 예외" 트리거가 있습니다. 이는 HotSpot JVM이 지원하는 VM 매개변수
    -XX:+HeapDumpOnOutOfMemoryError
    에 해당합니다.

  • JDK의 jmap 실행 파일 을 사용하여 실행 중인 JVM에서 HPROF 힙 덤프를 추출할 수 있습니다.

    JProfiler에는 jmap보다 더 다양한 명령줄 도구인 jpdump이 포함되어 있습니다. 이 도구는 프로세스를 선택할 수 있게 하고, Windows에서 서비스로 실행 중인 프로세스에 연결할 수 있으며, 혼합 32비트/64비트 JVM에서도 문제가 없고 HPROF 스냅샷 파일을 자동으로 번호 매깁니다. 더 많은 정보를 얻으려면 -help 옵션으로 실행하세요.

JDK Flight Recorder 스냅샷

JProfile은 Java Flight Recorder (JFR)에서 저장된 스냅샷 열기를 완벽하게 지원합니다. 이 경우 UI는 상당히 다르며 JFR의 기능에 맞게 조정됩니다. 자세한 내용은 JFR 도움말 주제를 참조하세요.