JProfiler 도움말

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 스냅샷을 열 때는 파일 선택기에서 "Customize analysis" 체크박스를 클릭하고 분석에 필요하지 않은 이벤트 카테고리를 제외하여 스냅샷 처리 속도를 높이고 메모리 사용량을 줄일 수 있습니다. 사용 가능한 이벤트 카테고리는 개별 프로브 및 뷰 섹션을 다룹니다. CPU 뷰, 메모리 뷰 및 텔레메트리 뷰를 위한 이벤트 유형은 선택 사항이 아니며 반드시 로드해야 합니다.

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

JFR 스냅샷의 스택 트레이스

JFR의 중요한 기능 중 하나는 특정 이벤트 유형에 대한 전체 스택 트레이스를 효율적인 방식으로 로깅할 수 있다는 점입니다. 이러한 이벤트 유형의 경우 JFR 설정에서 스택 트레이스 녹화를 켜고 끌 수 있습니다. 많은 JVM 애플리케이션 이벤트 유형, 특히 스레드와 관련된 이벤트 유형은 기본적으로 스택 트레이스 녹화가 활성화되어 있습니다.

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

-XX:FlightRecorderOptions=stackdepth=<nnnn>

VM 매개변수를 사용하면 JFR에서 수집되는 트레이스의 크기를 늘려 애플리케이션에서 잘린 트레이스를 없앨 수 있습니다.