Java Academy · Oppitunti

GC-säätöasetukset ja JVisualVM-profilointi

Aseta keon kokorajoitukset, ota GC-lokit käyttöön ja profilooi keon käyttöä käynnissä olevassa sovelluksessa JVisualVM:llä.

Oppitunti 4/414 vaihetta

GC-säätöasetukset ja JVisualVM-profilointi on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Miksi GC:tä säädetään?

GC:n oletusasetukset toimivat hyvin monissa sovelluksissa, mutta suuren läpimenon tai pienen latenssin työkuormat voivat vaatia säätämistä. Mitatkaa ensin – älkää koskaan säätäkö sokkona.

Kekomuistin kokoliput

Asettakaa keon alku- (-Xms) ja enimmäiskoko (-Xmx). Asettakaa tuotannossa arvot yhtä suuriksi dynaamisen koon muuttamisen aiheuttamien taukojen estämiseksi. Aloittakaa 60–70 prosentista käytettävissä olevasta RAM-muistista.

// Example production flags:
java -Xms2g -Xmx2g -XX:+UseG1GC MyApp
// Avoid:
java -Xmx8g MyApp  // initial = 256m, max = 8g → resizing pauses

Nuoren sukupolven koko

Kasvattakaa nuoren sukupolven kokoa allokointipainotteisissa sovelluksissa vähentääksenne Minor GC -keräysten tiheyttä. Käyttäkää asetusta -Xmn tai -XX:NewRatio (vanhan ja nuoren sukupolven suhde, oletusarvo 2).

// Set Young Gen to 1 GB:
java -Xmx4g -Xmn1g MyApp
// Or via ratio:
java -Xmx4g -XX:NewRatio=3 MyApp  // 3GB old, 1GB young

G1:n taukotavoite

Asettakaa -XX:MaxGCPauseMillis ilmoittaaksenne G1:lle halutun enimmäistauon. G1 säätää keräysjoukkoaan tavoitteen saavuttamiseksi – kyseessä on kuitenkin tavoite, ei ehdoton takuu.

java -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx8g MyApp
// G1 will try to keep pauses under 100 ms

GC-säikeiden määrä

Hallinnoikaa rinnakkaisuutta asetuksilla -XX:ParallelGCThreads (stop-the-world-säikeet) ja -XX:ConcGCThreads (G1:n ja ZGC:n samanaikaiset säikeet).

// On an 8-core machine:
java -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2 MyApp

GC-lokien käyttöönotto (JVM 9+)

Käyttäkää Xlog-kehystä GC-tapahtumien tallentamiseen. Analysoikaa lokit offline-tilassa havaitaksenne pitkät tauot, allokointipiikit ja promootioiden epäonnistumiset.

java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=20m MyApp

Varoitus erittäin suurista objekteista

Objektit, jotka ovat suurempia kuin 50 % G1-alueesta, ovat "humongous"-objekteja. Ne ohittavat nuoren sukupolven ja siirtyvät suoraan vanhaan sukupolveen. Tämä voi aiheuttaa fragmentaatiota. Pitäkää suuret objektit pieninä tai kasvattakaa alueen kokoa.

// Increase G1 region size (range: 1 MB to 32 MB, must be power of 2):
java -XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx16g MyApp

JVisualVM:n yleiskatsaus

JVisualVM (JDK 8:n mukana toimitettava ja uudemmille JDK-versioille ladattava työkalu) tarjoaa graafisen käyttöliittymän paikallisten ja etäkäytössä olevien JVM-prosessien keon, GC:n, suorittimen ja säikeiden valvontaan.

Yhteyden muodostaminen etäkäytössä olevaan JVM:ään

Ottakaa palvelimella JMX käyttöön, jotta voitte muodostaa siihen etäyhteyden JVisualVM:llä. Lisätkää nämä liput kohde-JVM:n käynnistykseen.

// Remote JVM flags:
java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9090 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     MyApp

Heap dump JVisualVM:stä

Napsauttakaa JVisualVM:ssä prosessia hiiren oikealla painikkeella → "Heap Dump". Dump näyttää elävät objektit, säilytetyt koot ja viittaukset. Käyttäkää "OQL Console" -konsolia dumpin kyselyyn SQL:n kaltaisella syntaksilla.

Suorittimen profilointi JVisualVM:llä

Siirtykää Profiler-välilehdelle ja napsauttakaa "CPU". JVisualVM instrumentoi metodit ja näyttää kuumat kutsupinot. Pysäyttäkää profiloija nähdäksenne, mitkä metodit käyttivät eniten aikaa.

Java Flight Recorder ja JVisualVM

JFR:n kuormitus on pienempi (noin 1–2 %), joten se sopii tuotantokäyttöön. Profilointia käyttävän JVisualVM:n kuormitus on suurempi, joten se sopii paremmin kehitykseen. Käyttäkää tuotannossa JFR:ää ja kehityksen virheenkorjauksessa JVisualVM:ää.

Pikatarkistus

Mikä lippu asettaa G1:n tavoitellun GC:n enimmäistauon?

Kertaus

Asettakaa tuotannossa -Xms == -Xmx. Säätäkää G1:tä asetuksella -XX:MaxGCPauseMillis. Ottakaa GC-lokitus käyttöön Xlogilla. Käyttäkää JVisualVM:ää kehityksen virheenkorjaukseen ja JFR:ää tuotannon profilointiin.

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 ”GC-säätöasetukset ja JVisualVM-profilointi” ilmainen?

Kyllä – oppitunnin ”GC-säätöasetukset ja JVisualVM-profilointi” 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 ”GC-säätöasetukset ja JVisualVM-profilointi”?

Aseta keon kokorajoitukset, ota GC-lokit käyttöön ja profilooi keon käyttöä käynnissä olevassa sovelluksessa JVisualVM:llä. 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 4/4.

Kuinka kauan ”GC-säätöasetukset ja JVisualVM-profilointi”-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. JVM:n kekialueet ja olioiden elinkaari
  2. GC-algoritmit: Serial, G1, ZGC ja Shenandoah
  3. Muistivuotojen havaitseminen ja korjaaminen
  4. GC-säätöasetukset ja JVisualVM-profilointi
← Takaisin: Java Academy