JDK Mission Control로 분석
JFR 기록을 읽습니다
JDK Mission Control로 분석은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
JMC란 무엇입니까
JDK 미션 컨트롤(JMC)은 JFR 기록을 분석하기 위한 그래픽 도구입니다.
.jfr 파일을 열어 원시 이벤트를 탐색 가능한 보기로 변환합니다. CPU 사용량이 높은 메서드, 가비지 컬렉션 동작, 잠금 경합, 할당 등을 확인할 수 있습니다. 또한 발생 가능성이 높은 문제를 표시하는 자동 분석 페이지도 제공합니다.
JMC 설치하기
JMC는 독립 실행형으로 다운로드할 수 있습니다(JDK 8 이후 JDK에서 분리되었습니다).
아답티움 또는 오라클의 JMC 빌드를 다운로드하여 실행한 다음 파일 > 파일 열기에서 .jfr 파일을 엽니다. 에이전트나 앱 재시작은 필요하지 않습니다. 이미 수집된 기록을 분석하면 됩니다.
자동 분석 페이지
JMC가 가장 먼저 보여 주는 것은 자동 분석입니다. 기록을 평가하는 일련의 휴리스틱입니다.
긴 가비지 컬렉션 일시 중지, 높은 할당량, 차단된 스레드, 기본형에서 객체로의 박싱 등을 강조 표시합니다. 각 발견 항목에는 심각도와 짧은 설명이 있으므로, 직접 자세히 조사하기 전에 시작점으로 활용하기 좋습니다.
메서드 프로파일링 보기
메서드 프로파일링 페이지는 실행 샘플을 호출 트리로 집계합니다.
자체 시간이 가장 긴 메서드가 CPU 핫스팟입니다. 하향식(호출자에서 피호출자로) 보기와 상향식(핫 메서드 우선) 보기 사이를 전환하면 무엇이 느린지와 어떤 코드가 이를 호출하는지를 모두 파악할 수 있습니다.
플레임 그래프
JMC는 스택 샘플을 플레임 그래프로 표시하며, 너비는 소요 시간에 비례합니다.
그래프 상단에 있는 넓은 평탄부가 CPU가 실제로 실행 시간을 소비하는 부분입니다. 이 시각화는 정렬된 표를 읽는 것보다 훨씬 빠르게 어떤 호출 경로가 대부분의 시간을 차지하는지 보여 줍니다.
가비지 컬렉션 보기
가비지 컬렉션 페이지에서는 일시 중지 시간, 빈도, 실행된 수집기를 보여 줍니다.
지연 시간에 영향을 주는 길거나 잦은 일시 중지를 찾으십시오. 높은 할당률은 대개 영 세대 가비지 컬렉션이 자주 발생하는 것과 관련이 있습니다. 해결 방법은 수집기를 바꾸는 것이 아니라 객체 생성과 폐기를 줄이는 것입니다.
할당 핫스팟
JMC의 TLAB 할당 보기에서는 객체가 생성되는 위치의 순위를 보여 줍니다.
이를 호출 스택과 함께 사용하여 부하가 높은 반복문에서 할당이 발생하는 정확한 줄을 찾으십시오. 버퍼를 재사용하거나 자동 박싱을 피하는 작은 변경만으로도 가비지 컬렉션 부담을 크게 줄일 수 있습니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Autoboxing: each add boxes an int into an Integer object
List<Integer> boxed = new ArrayList<>();
for (int i = 0; i < 5; i++) boxed.add(i);
System.out.println("Boxed " + boxed.size() + " Integers");
System.out.println("JMC allocation view would flag this hotspot");
}
}잠금 경합
잠금 인스턴스 및 Java 모니터 보기에서는 동기화를 기다리는 스레드를 확인할 수 있습니다.
많은 스레드가 동일한 모니터에서 차단된다면 해당 잠금이 확장성 병목입니다. JMC는 경합이 발생한 객체와 대기 중인 호출 스택을 보여 주므로 올바른 핵심 구역을 대상으로 조치할 수 있습니다.
스레드 및 지연 시간 보기
스레드 페이지에는 각 스레드의 타임라인이 표시됩니다. CPU 실행 중, 일시 대기, IO 대기 중 또는 차단된 상태를 확인할 수 있습니다.
이를 통해 성능 저하가 CPU 작업 중심인지 IO 작업 중심인지 확인할 수 있습니다. 이는 병목 수업에서 배운 것과 정확히 같은 구분입니다. 넓은 '대기 중' 구간은 계산 중심이 아니라 IO 또는 잠금 대기 중심이라는 뜻입니다.
문제 발견에서 해결까지
작업 흐름은 다음과 같습니다. 기록을 열고, 자동 분석을 읽고, 표시된 영역(메서드 프로파일링, 가비지 컬렉션 또는 잠금)을 자세히 살펴보고, 플레임 그래프와 스레드 보기로 확인한 다음 가설을 세웁니다.
한 가지를 변경하고 다시 기록한 뒤 기준선과 비교합니다. JMC는 바이너리 파일을 조치로 이어지는 정보로 바꿔 줍니다.
기록 비교
최적화가 효과가 있었음을 입증하려면 '이전' 기록과 '이후' 기록을 비교합니다.
기준선 JFR을 수집하고 한 가지를 변경한 다음 다른 기록을 수집하여 두 기록을 JMC에서 엽니다. 메서드 프로파일링, 가비지 컬렉션, 할당 등 동일한 보기를 나란히 비교합니다. 실제 개선이 있었다면 자체 시간 감소, 가비지 컬렉션 일시 중지 감소 또는 할당률 감소로 나타납니다. 아무것도 변하지 않았다면 변경을 되돌립니다.
빠른 확인
JMC의 메서드 프로파일링 및 플레임 그래프 보기에서 메서드의 자체 시간(또는 상단의 넓은 평탄부)은 무엇을 나타냅니까?
요약
JMC는 JFR 기록을 읽어 조치 가능한 정보로 바꿉니다.
- 자동 분석이 먼저 발생 가능성이 높은 문제를 표시합니다.
- 메서드 프로파일링과 플레임 그래프가 자체 시간을 통해 CPU 핫스팟을 보여 줍니다.
- 가비지 컬렉션 및 할당 보기에서 메모리 생성과 폐기 부담을 확인할 수 있습니다.
- 잠금 및 스레드 보기에서 CPU 작업 중심인지 IO 또는 잠금 대기 중심인지 구분할 수 있습니다.
- 세부적으로 분석하고, 가설을 세우고, 한 가지를 수정하고, 다시 기록한 뒤 비교합니다.
AI 튜터와 함께 Java을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 104
- 레슨
- 374
자주 묻는 질문
“JDK Mission Control로 분석” 강의는 무료인가요?
네 — “JDK Mission Control로 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“JDK Mission Control로 분석”에서 뭘 배우나요?
JFR 기록을 읽습니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“JDK Mission Control로 분석” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 병목 식별
- Java Flight Recorder
- JDK Mission Control로 분석
- 자주 사용하는 JVM 튜닝 플래그