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ä.
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 pausesNuoren 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 youngG1: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 msGC-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 MyAppGC-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 MyAppVaroitus 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 MyAppJVisualVM: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 \
MyAppHeap 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.
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
- JVM:n kekialueet ja olioiden elinkaari
- GC-algoritmit: Serial, G1, ZGC ja Shenandoah
- Muistivuotojen havaitseminen ja korjaaminen
- GC-säätöasetukset ja JVisualVM-profilointi