JProfiler 도움말Download

JProfiler로 JFR 스냅샷 녹화하기


JFR을 프로덕션 JVM에서 최소한의 오버헤드로 실행할 수 있고 프로파일링 인터페이스를 활성화할 필요가 없다는 이점 때문에, JProfiler는 UI에서 직접 JFR 녹화를 지원합니다. JFR을 프로그래밍 방식으로 시작하거나 명령줄에서 -XX:StartFlightRecording VM 매개변수를 추가하여 시작할 수 있지만, JProfiler는 이미 실행 중인 JVM에 대해 녹화를 시작하고 중지하는 데 도움을 줍니다.

JProfiler로 JVM에 attach할 때, 네이티브 프로파일링 에이전트를 로드하는 대신 JFR 녹화를 시작하고 중지하도록 선택할 수 있습니다. JProfiler의 광범위한 원격 연결 기능을 통해, 예를 들어 Docker나 Kubernetes 컨테이너에서 실행 중인 JVM에서 컨테이너를 수정할 필요 없이 JFR 녹화를 시작할 수 있습니다.

JFR 녹화 시작 및 중지

시작 센터의 "Quick attach" 탭에서 JVM을 선택하고 대화 상자 하단의 Start JFR 버튼을 클릭합니다. 로컬에서 실행 중인 JVM이 스크린샷에 표시되지만, 원격 JVM에 attach할 때도 동일한 버튼을 사용할 수 있습니다.

JFR 설정 마법사에서 선택한 프로세스가 사용하는 JRE의 lib/jfr 디렉토리에서 전송된 이벤트 설정 템플릿 중 하나를 선택할 수 있습니다. 기본적으로 "default"와 "profile"이라는 두 가지 템플릿이 있으며, "profile"은 더 많은 데이터를 기록하고 더 많은 오버헤드를 추가합니다. 해당 디렉토리에 다른 파일을 생성하면 마법사에서 해당 템플릿을 선택할 수 있습니다.

이러한 템플릿 파일에는 사용 가능한 이벤트와 중요한 고급 설정에 대한 구성 지침이 포함되어 있습니다. 각 고급 설정은 여러 다른 이벤트와 연결될 수 있습니다. 이 UI는 템플릿 파일의 내용에 따라 동적으로 생성됩니다. 다른 프로필 간 전환을 통해 다른 기본값을 확인할 수 있습니다. 이 UI에 포함되지 않은 더 많은 이벤트 유형이 있으며, 이는 다음 단계에서만 구성할 수 있습니다.

동일한 이벤트 유형 세트로 JVM에 대해 JFR 녹화를 이미 시작한 경우, JProfiler는 마지막 설정을 사용할 수 있는 옵션을 제공합니다.

해당 옵션을 선택하면 고급 녹화 설정은 사용할 수 없으며, 다음 단계로 진행하여 전체 구성을 보고 추가 변경을 할 수 있습니다.

마법사의 이 단계에서 또 다른 중요한 설정은 최대 스냅샷 크기입니다. JFR 녹화의 특성상 스냅샷의 크기는 매우 빠르게 증가할 수 있으며, 전체 하드 디스크를 채울 수 있습니다. 이를 방지하기 위해 최대 스냅샷 크기 제한은 과도한 저장소 사용을 방지합니다. 최대 크기에 도달하면, 오래된 이벤트는 삭제되고 새로운 이벤트는 계속 기록됩니다. 이 프로세스는 JFR의 자동 메커니즘입니다.

마법사의 다음 단계에서는 모든 이벤트 유형의 분류된 트리를 볼 수 있으며, 오른쪽에서 각 이벤트에 대한 추가 구성을 할 수 있습니다.

이벤트에는 기간, 임계값 및 각 이벤트에 대해 스택 추적을 기록할지 여부에 대한 플래그 설정이 있을 수 있습니다. 기간과 임계값 모두 시간 단위로 설정되며, down 키를 눌러 사용 가능한 단위에 대한 자동 완성 팝업을 얻을 수 있습니다. 기간은 또한 자동 완성 팝업에서 사용할 수 있는 특별한 값 "everyChunk", "beginChunk" 및 "endChunk"를 지원합니다. "chunk"는 JFR 녹화의 일부로, 연속적인 이벤트 데이터와 메타데이터 세트를 보유하며 녹화에서 기본 저장 및 데이터 전송 단위로 기능합니다.

트리에서 더 많은 이벤트가 선택될수록 더 많은 데이터가 기록됩니다. 일부 이벤트 유형은 대량의 데이터를 생성하는 반면, 일부는 적은 수의 이벤트만 생성합니다.

전체 프로파일링 모드나 "Heap dump only" 모드와 달리, JFR 스냅샷을 시작하면 UI에서 즉시 데이터를 볼 수 있는 것이 아니라, 선택되지 않은 경우 JVM의 배경색만 변경되어 JProfiler가 녹화를 시작했음을 알 수 있습니다. JVM이 선택되면, 하단의 JFR 버튼 텍스트가 녹화가 중지될 것임을 보여줍니다.

JProfiler에서 시작한 JFR 녹화를 중지하면, JFR 스냅샷이 전송되어 JProfiler에서 열립니다. 스냅샷은 임시이며 창을 닫으면 삭제됩니다. 스냅샷을 영구적인 위치에 저장하려면, 툴바의 "Save snapshot" 작업을 사용하세요.

JFR 녹화가 있는 종료된 JVM

JFR의 한 가지 언급된 사용 사례는 충돌 전의 순간을 조사하는 것입니다. 이 경우, JVM은 더 이상 JVM 테이블에 표시되지 않아 JFR 녹화를 중지하고 JFR 스냅샷을 열 수 없습니다. JProfiler에서 JFR 녹화를 시작하고 녹화를 중지하기 전에 JVM이 종료되면, "Terminated JFR:"로 시작하는 특별한 항목이 JVM 테이블에 추가됩니다. 해당 항목을 더블 클릭하거나 "JFR" 버튼을 사용하여 JFR 스냅샷을 열 수 있습니다.

해당 항목을 열면 목록에서 제거됩니다. 수동으로 중지된 녹화와 마찬가지로, 열린 JFR 스냅샷은 임시이며 나중에 분석을 위해 보관하려면 저장해야 합니다.

외부에서 시작된 JFR 녹화 표시

위의 예에서는 JProfiler에서 JFR 녹화를 시작하고 중지했습니다. JProfiler 외부에서 시작된 JFR 녹화도 표시할 수 있습니다. 연속 JFR 녹화는 VM 매개변수로 쉽게 시작할 수 있습니다.

"-XX:StartFlightRecording=maxsize=500m=filename=$TEMP/myapp.jfr,name=Continuous recording"

JVM 테이블에서 JFR 녹화가 실행 중임을 나타내는 특별한 배경색은 JProfiler에서 시작된 JFR 녹화에만 해당됩니다. 다른 방법으로 JFR 녹화가 시작된 JVM에 연결하면 다른 대화 상자가 표시됩니다.

이제 JProfiler에서 새 녹화를 시작하거나 기존 녹화를 덤프하여 결과 JFR 스냅샷을 JProfiler에서 표시할 수 있습니다. 외부에서 시작된 JFR 녹화는 별도의 라이프 사이클을 가지며 JProfiler에 의해 중지되지 않습니다.