JProfiler 도움말Download

JDK Flight Recorder (JFR) 지원


JDK Flight Recorder (JFR)는 시스템 수준의 다양한 이벤트를 기록하는 구조화된 로깅 도구입니다. 항공기의 블랙박스가 비행 데이터를 지속적으로 기록하여 사고 조사에 사용되는 것과 유사하게, JFR은 문제 진단에 사용하기 위해 JVM에서 이벤트 스트림을 지속적으로 기록합니다. 이 접근 방식의 장점은 사건 발생 전 시스템에 대한 시간 순서대로 상세한 정보를 캡처한다는 것입니다. JFR은 성능에 미치는 영향을 최소화하도록 설계되었으며, 프로덕션 환경에서 장기간 실행해도 안전합니다.

Java 17부터 JFR은 JProfiler의 데이터 소스 중 하나로 사용됩니다. JVM의 프로파일링 인터페이스를 사용하는 네이티브 에이전트 외에도, 프로파일링 컨텍스트에서 관심 있는 JVM의 고급 시스템이 있습니다. 하나는 JProfiler의 일부 텔레메트리에 데이터를 제공하는 MBean 시스템이고, 다른 하나는 가비지 컬렉터 프로브에 사용되는 JFR입니다. 이를 위해 JFR과 상호작용할 필요는 없으며, JProfiler가 JFR 이벤트 스트리밍을 투명하게 처리합니다.

JProfiler에서의 JFR 통합

JProfiler는 JFR 녹화를 완전히 통합하여, 로컬 머신이나 JFR 녹화가 구성되지 않은 원격 머신에서 실행 중인 JVM에서 데이터를 쉽게 캡처할 수 있습니다.

JProfiler UI에서 JFR 스냅샷을 열면, 사용 가능한 뷰와 섹션이 일반적인 프로파일링 세션과 다릅니다. UI의 중심은 이벤트 브라우저입니다. JFR 뷰에 사용 가능한 다른 모든 뷰는 별도의 장에서 설명됩니다.

이벤트 유형을 설정하고 필터를 설정하며 분석을 보는 동안, JProfiler는 가끔 JFR 스냅샷 파일을 다시 스캔해야 할 수 있습니다. JFR 스냅샷 파일은 잠재적으로 매우 크며, 모든 데이터를 메모리에 보관하거나 모든 분석을 미리 계산하는 것은 실현 가능하지 않습니다. 이 때문에 네트워크 드라이브에서 JFR 스냅샷을 여는 것은 권장되지 않습니다.

매우 큰 JFR 스냅샷을 열 때, 파일 선택기에서 "분석 사용자 정의" 체크 박스를 클릭하고 분석에 필요하지 않은 이벤트 카테고리를 제외하여 스냅샷 처리 속도를 높이고 메모리 사용량을 줄일 수 있습니다. 사용 가능한 이벤트 카테고리는 단일 프로브와 뷰 섹션을 포함합니다. CPU 뷰, 메모리 뷰 및 텔레메트리 뷰에 대한 이벤트 유형은 선택 사항이 아니며 로드해야 합니다.

예를 들어, CPU 데이터에만 관심이 있는 경우 모든 프로브와 이벤트 브라우저를 제외할 수 있습니다. JProfiler는 가장 빠른 JFR 뷰어가 되는 것을 목표로 하며, 일반적인 JFR 스냅샷을 빠르게 엽니다. 그러나 JFR 녹화는 잠재적으로 무제한이며, 수십 기가바이트 크기의 스냅샷을 마주할 수 있어 열기 속도가 문제가 될 수 있습니다.

JFR 스냅샷의 스택 트레이스

JFR의 중요한 기능 중 하나는 특정 이벤트 유형에 대해 전체 스택 트레이스를 효율적으로 기록할 수 있는 기능입니다. 이러한 이벤트 유형에 대해서는 JFR 설정에서 스택 트레이스 기록을 토글할 수 있습니다. 특히 스레드와 관련된 많은 JVM 애플리케이션 이벤트 유형은 기본적으로 스택 트레이스 기록이 활성화되어 있습니다.

JFR은 고정된 깊이까지의 스택 트레이스만 수집하므로 긴 스택 트레이스는 잘립니다. 잘린 트레이스는 이해할 수 있는 호출 트리를 구축하는 데 적합하지 않으므로, 이러한 트레이스는 특별히 표시된 노드 아래에 표시됩니다.

-XX:FlightRecorderOptions=stackdepth=<nnnn>

VM 매개변수를 사용하여 JFR에서 수집된 트레이스의 크기를 늘리고 애플리케이션의 잘린 트레이스를 제거할 수 있습니다.