프로파일링 인터페이스를 활성화할 필요 없이 최소한의 오버헤드로 프로덕션 JVM에서 JFR을 실행할 수 있다는 이점 덕분에, JProfiler는 UI에서 직접 JFR 녹화를 지원합니다.
프로그래밍 방식으로 또는 명령줄에서 -XX:StartFlightRecording VM 매개변수를 추가하여 JFR을 시작할 수도 있지만, JProfiler를 사용하면 이미
실행 중인 JVM에 대해 녹화를 시작하고 중지할 수 있습니다.
JProfiler로 JVM에 attach할 때 네이티브 프로파일링 에이전트를 로드하는 대신 JFR 녹화를 시작 및 중지하도록 선택할 수 있습니다. JProfiler의 광범위한 원격 연결 기능을 사용하면 컨테이너를 수정할 필요 없이 Docker 또는 Kubernetes 컨테이너에서 실행되는 JVM에서 JFR 녹화를 시작할 수 있습니다.
JFR 녹화 시작 및 중지
시작 센터의 "빠른 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"도 지원됩니다. "청크"는 연속된 이벤트 데이터 및 메타데이터 세트를 담고 있으며 녹화 시 스토리지 및 데이터 전송의 기본 단위로 기능하는 JFR 녹화의 일부를
의미합니다.
트리에서 더 많은 이벤트를 선택할수록 더 많은 데이터가 기록됩니다. 일부 이벤트 유형은 방대한 양의 데이터를 생성하는 반면, 일부는 극소수의 이벤트만 생성합니다.
UI에서 즉시 일부 데이터가 표시되는 전체 프로파일링 모드 또는 "Heap dump only" 모드와 달리, JFR 스냅샷을 시작하면 선택되지 않았을 때 테이블 내 JVM의 배경색만 변경되어 JProfiler가 녹화를 시작했음을 확인할 수 있습니다. JVM을 선택하면 하단의 JFR 버튼 텍스트에 녹화가 중지될 것임이 표시됩니다.
JProfiler에서 시작된 JFR 녹화를 중지하면 JFR 스냅샷이 전송되어 JProfiler에서 열립니다. 이 스냅샷은 임시 스냅샷이며 창을 닫으면 삭제됩니다. 영구적인 위치에 스냅샷을 저장하려면 툴바의 "Save snapshot" 액션을 사용하십시오.
JFR 녹화 중 종료된 JVM
JFR의 언급된 용도 중 하나는 비정상 종료 직전의 순간을 조사하는 것입니다. 이 경우 JVM 테이블에서 해당 JVM을 더 이상 사용할 수 없으므로 JFR 녹화를 중지하고 JFR 스냅샷을 열 수 없게 됩니다. JProfiler에서 JFR 녹화가 시작되었고 녹화를 중지하기 전에 JVM이 종료되면 "Terminated JFR:" 접두사가 붙은 특수 항목이 JVM 테이블에 추가됩니다. 해당 항목을 더블 클릭하거나 "Open Snapshot" 버튼을 사용하여 JFR 스냅샷을 열 수 있습니다.
이러한 항목을 한 번 열면 목록에서 제거됩니다. 수동으로 중지된 녹화와 마찬가지로, 열린 JFR 스냅샷은 임시 상태이므로 나중에 분석하기 위해 유지하려면 저장해야 합니다.
외부에서 시작된 JFR 녹화 표시하기
위의 예에서는 JFR 녹화가 JProfiler 내에서 시작되고 중지되었습니다. 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에 의해 중지되지 않습니다.













