Analiza za pomocą JDK Mission Control
Odczytywanie nagrań JFR
Analiza za pomocą JDK Mission Control to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Czym jest JMC?
JDK Mission Control (JMC) to graficzne narzędzie do analizowania nagrań JFR.
Otwiera plik .jfr i przekształca surowe zdarzenia w widoki, po których można nawigować: gorące metody, zachowanie GC, rywalizację o blokady, alokacje i inne informacje. Zawiera także stronę Analiza automatyczna, która sygnalizuje prawdopodobne problemy.
Pobieranie JMC
JMC to samodzielnie pobierane narzędzie (zostało wyłączone z JDK po JDK 8).
Należy pobrać je z kompilacji JMC firmy Adoptium lub Oracle, uruchomić i otworzyć plik .jfr za pomocą opcji Plik > Otwórz plik. Nie jest potrzebny agent ani ponowne uruchamianie aplikacji — analizuje się już zarejestrowane nagranie.
Strona analizy automatycznej
Pierwszą rzeczą wyświetlaną przez JMC jest Analiza automatyczna: zestaw heurystyk oceniających nagranie.
Wskazuje ona między innymi długie pauzy GC, dużą liczbę alokacji, zablokowane wątki oraz boxing typów prostych do obiektów. Każde wykrycie ma poziom ważności i krótkie wyjaśnienie — to świetny punkt wyjścia przed ręcznym zagłębieniem się w dane.
Widok profilowania metod
Strona Profilowanie metod agreguje próbki wykonania w drzewo wywołań.
Metody z najwyższym czasem własnym są gorącymi punktami procesora. Można przełączać się między widokiem top-down (od wywołującego do wywoływanego) a bottom-up (najpierw gorąca metoda), aby zrozumieć zarówno to, co działa wolno, jak i to, kto to wywołuje.
Wykresy płomieniowe
JMC przedstawia próbki stosu jako wykres płomieniowy: szerokość jest proporcjonalna do spędzonego czasu.
Szerokie płaskie obszary u góry wykresu wskazują miejsca, w których procesor rzeczywiście wykonuje najwięcej cykli. Ta wizualizacja pokazuje, która ścieżka wywołań dominuje, znacznie szybciej niż odczytywanie posortowanej tabeli.
Widok odśmiecania pamięci
Strony GC pokazują czasy trwania pauz, ich częstotliwość oraz to, który kolektor działał.
Proszę szukać długich lub częstych pauz, które pogarszają opóźnienia. Wysokie tempo alokacji zwykle koreluje z częstymi cyklami GC młodej generacji — rozwiązaniem jest ograniczenie nadmiarowego tworzenia obiektów, a nie zmiana kolektora.
Gorące punkty alokacji
Widok Alokacje TLAB w JMC porządkuje miejsca, w których tworzone są obiekty.
Proszę połączyć te informacje ze śladem stosu, aby znaleźć dokładny wiersz powodujący alokację w gorącej pętli. Często niewielka zmiana — ponowne użycie bufora lub unikanie autoboxingu — znacznie zmniejsza presję na GC.
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");
}
}Rywalizacja o blokady
Widoki Instancje blokad i Monitor Java pokazują wątki oczekujące na synchronizację.
Jeśli wiele wątków blokuje się na tym samym monitorze, ta blokada stanowi wąskie gardło skalowalności. JMC pokazuje obiekt, o który toczy się rywalizacja, oraz ślady stosu oczekujących wątków, dzięki czemu można zająć się właściwą sekcją krytyczną.
Widoki wątków i opóźnień
Strona Wątki pokazuje oś czasu każdego wątku: wykonujący się na CPU, zaparkowany, oczekujący na I/O lub zablokowany.
W ten sposób można potwierdzić, czy spowolnienie jest CPU-bound, czy I/O-bound — dokładnie takie rozróżnienie przedstawiono w lekcji o wąskich gardłach. Szerokie pasma „waiting” oznaczają, że problem dotyczy I/O lub blokad, a nie obliczeń.
Od wykrycia problemu do rozwiązania
Przepływ pracy wygląda następująco: otworzyć nagranie, odczytać Analizę automatyczną, zagłębić się we wskazany obszar (profilowanie metod, GC lub blokady), potwierdzić ustalenia za pomocą wykresu płomieniowego i widoku wątków, a następnie sformułować hipotezę.
Proszę zmienić jedną rzecz, nagrać dane ponownie i porównać je z punktem odniesienia. JMC przekształca plik binarny w konkretne wskazówki.
Porównywanie nagrań
Aby wykazać, że optymalizacja zadziałała, należy porównać nagranie „przed” i „po”.
Należy zarejestrować bazowe nagranie JFR, wprowadzić jedną zmianę, zarejestrować kolejne nagranie i otworzyć oba w JMC. Proszę porównać te same widoki — profilowanie metod, GC i alokacje — obok siebie. Rzeczywista poprawa będzie widoczna jako skrócenie czasu własnego, mniejsza liczba pauz GC lub niższe tempo alokacji. Jeśli nic się nie zmieniło, należy wycofać zmianę.
Szybkie sprawdzenie
Co wskazuje czas własny metody w widokach profilowania metod i wykresu płomieniowego JMC (lub szeroki płaski obszar u góry)?
Podsumowanie
JMC odczytuje nagrania JFR i pomaga przekuć je w konkretne działania:
- Analiza automatyczna od razu sygnalizuje prawdopodobne problemy.
- Profilowanie metod i wykresy płomieniowe ujawniają gorące punkty CPU na podstawie czasu własnego.
- Widoki GC i alokacji pokazują nadmiarowe tworzenie obiektów.
- Widoki blokad i wątków pozwalają odróżnić problemy CPU-bound od problemów I/O-bound lub lock-bound.
- Należy zagłębić się w szczegóły, sformułować hipotezę, naprawić jedną rzecz, nagrać dane ponownie i porównać wyniki.
Często zadawane pytania
Czy lekcja „Analiza za pomocą JDK Mission Control” jest bezpłatna?
Tak — pełny tekst „Analiza za pomocą JDK Mission Control” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Analiza za pomocą JDK Mission Control”?
Odczytywanie nagrań JFR Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Analiza za pomocą JDK Mission Control”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Identyfikowanie wąskich gardeł
- Java Flight Recorder
- Analiza za pomocą JDK Mission Control
- Typowe opcje dostrajania JVM