Java Academy · Oppitunti

Analysointi JDK Mission Controlilla

Lue JFR-tallenteita.

Oppitunti 3/413 vaihetta

Analysointi JDK Mission Controlilla on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mikä JMC on?

JDK Mission Control (JMC) on graafinen työkalu JFR-tallenteiden analysointiin.

Se avaa .jfr-tiedoston ja muuttaa raakatapahtumat selattaviksi näkymiksi: kuumiksi metodeiksi, GC:n toiminnaksi, lukituskilpailuksi, allokoinniksi ja muiksi tiedoiksi. Se sisältää myös Automated Analysis -sivun, joka ilmoittaa todennäköisistä ongelmista.

JMC:n hankkiminen

JMC on erikseen ladattava ohjelma, jota ei enää toimitettu JDK:n mukana JDK 8:n jälkeen.

Ladatkaa se Adoptiumin tai Oraclen JMC-koontiversioista, käynnistäkää se ja avatkaa .jfr-tiedosto valitsemalla File > Open File. Sovellukseen ei tarvita agenttia eikä uudelleenkäynnistystä — analysoitte jo tallennettua tallennetta.

Automated Analysis -sivu

Ensimmäisenä JMC näyttää Automated Analysis -näkymän: joukon heuristiikkoja, jotka arvioivat tallennetta.

Se nostaa esiin esimerkiksi pitkät GC-tauot, runsaan allokoinnin, estyneet säikeet ja primitiivityyppien muuntamisen olioiksi. Jokaisella havainnolla on vakavuusaste ja lyhyt selitys — tämä on erinomainen lähtökohta ennen manuaalista tutkimista.

Method Profiling -näkymä

Method Profiling -sivu kokoaa suorituksen näytteet kutsupuuksi.

Metodit, joilla on suurin self time, ovat CPU:n hotspotit. Voitte vaihtaa ylhäältä alas (kutsujasta kutsuttuun) ja alhaalta ylös (kuuma metodi ensin) esittävien näkymien välillä ymmärtääksenne sekä sen, mikä on hidasta, että sen, kuka sitä kutsuu.

Flame graphit

JMC esittää pinojen näytteet flame graphina: leveys on suhteessa käytettyyn aikaan.

Kaavion yläosan leveät tasanteet osoittavat, missä CPU todella käyttää jaksonsa. Tämän visualisoinnin avulla näkee heti, mikä kutsupolku hallitsee suoritusta — huomattavasti nopeammin kuin lajiteltua taulukkoa lukemalla.

Roskienkeruunäkymä

GC-sivut näyttävät taukojen kestot ja tiheyden sekä sen, mikä roskienkerääjä suoritettiin.

Etsikää pitkiä tai usein toistuvia taukoja, jotka heikentävät latenssia. Suuri allokointinopeus korreloi yleensä usein toistuvien nuoren sukupolven GC-ajojen kanssa — ratkaisu on olioiden jatkuvan luomisen vähentäminen, ei roskienkerääjän vaihtaminen.

Allokoinnin hotspotit

JMC:n TLAB Allocations -näkymä järjestää sen mukaan, missä olioita luodaan.

Yhdistäkää tämä pinon jäljitykseen löytääksenne tarkan rivin, joka tekee allokoinnin kuumassa silmukassa. Usein pieni muutos — puskurin uudelleenkäyttö tai autoboxingin välttäminen — vähentää GC:n kuormitusta huomattavasti.

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");
    }
}

Lukituskilpailu

Lock Instances - ja Java Monitor -näkymät paljastavat säikeet, jotka odottavat synkronointia.

Jos monet säikeet estyvät saman monitorin vuoksi, kyseinen lukitus on skaalautuvuuden pullonkaula. JMC näyttää kiistanalaisen olion ja odottavien säikeiden pinon jäljitykset, joten voitte kohdistaa korjauksen oikeaan kriittiseen osioon.

Säie- ja latenssinäkymät

Threads-sivu näyttää kunkin säikeen aikajanan: suorittimella, parkissa, I/O:ta odottamassa tai estyneenä.

Näin voitte varmistaa, onko hidastuminen CPU- vai I/O-sidonnaista — juuri tämän eron käsittelimme pullonkauloja koskevassa oppitunnissa. Leveät ”waiting”-kaistat tarkoittavat, että suoritus on I/O- tai lukitussidonnaista eikä laskentasidonnaista.

Havainnosta korjaukseen

Työnkulku on seuraava: avatkaa tallenne, lukekaa Automated Analysis, siirtykää ilmoitettuun alueeseen (metodiprofilointi, GC tai lukitukset), varmistakaa havainto flame graphin ja säienäkymän avulla ja muodostakaa sitten hypoteesi.

Muuttakaa yhtä asiaa, tallentakaa uudelleen ja verratkaa tulosta vertailutasoonne. JMC muuttaa binaaritiedoston käytännön toimenpiteitä tukevaksi tiedoksi.

Tallenteiden vertaaminen

Osoittaaksenne optimoinnin toimivuuden verratkaa ”ennen”- ja ”jälkeen”-tallennetta.

Ottakaa vertailutason JFR-tallenne, tehkää yksi muutos, ottakaa toinen tallenne ja avatkaa molemmat JMC:ssä. Tarkastelkaa samoja näkymiä — metodiprofilointia, GC:tä ja allokointia — rinnakkain. Todellinen parannus näkyy pienempänä self time -arvona, vähäisempinä GC-taukoina tai pienempänä allokointinopeutena. Jos mikään ei muuttunut, palauttakaa muutos.

Pikatarkistus

Mitä metodin self time (tai kaavion yläosan leveä tasanne) osoittaa JMC:n metodiprofilointi- ja flame graph -näkymissä?

Yhteenveto

JMC lukee JFR-tallenteita ja muuttaa ne käytännön toimenpiteitä tukeviksi:

  • Automated Analysis ilmoittaa todennäköisistä ongelmista heti aluksi.
  • Metodiprofilointi ja flame graphit paljastavat CPU-hotspotit self time -arvon avulla.
  • GC- ja allokointinäkymät paljastavat muistin käytön jatkuvan vaihtuvuuden.
  • Lukitus- ja säienäkymät erottavat CPU-sidonnaisuuden I/O- tai lukitussidonnaisuudesta.
  • Tutkikaa yksityiskohtia, muodostakaa hypoteesi, korjatkaa yksi asia, tallentakaa uudelleen ja verratkaa tuloksia.
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Analysointi JDK Mission Controlilla” ilmainen?

Kyllä – oppitunnin ”Analysointi JDK Mission Controlilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Analysointi JDK Mission Controlilla”?

Lue JFR-tallenteita. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Analysointi JDK Mission Controlilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pullonkaulojen tunnistaminen
  2. Java Flight Recorder
  3. Analysointi JDK Mission Controlilla
  4. Yleiset JVM:n säätövalitsimet
← Takaisin: Java Academy