Alati naredbenog retka za pronalaženje veličine Java Java hrpe

1. Pregled

U ovom brzom vodiču upoznat ćemo se s nekoliko različitih načina za dobivanje veličine hrpe Java programa koji radi.

2. jcmd

Da bismo pronašli hrpu i informacije povezane s metaprostorom pokrenute Java aplikacije, možemo koristiti jcmd uslužni program naredbenog retka:

jcmd GC.heap_info

Prvo, idemo pronaći id procesa određenog Java programa pomoću jps naredba:

$ jps -l 73170 org.jetbrains.idea.maven.server.RemoteMavenServer36 4309 quarkus.jar 12070 sun.tools.jps.Jps

Kao što je gore prikazano, ID procesa za našu Quarkus aplikaciju je 4309. Sad kad imamo ID procesa, pogledajmo informacije o hrpi:

$ jcmd 4309 GC.heap_info 4309: hrpa prve smeće ukupno 206848K, korištena 43061K veličina regije 1024K, 43 mlada (44032K), 3 preživjela (3072K) Metaspace korišten 12983K, kapacitet 13724K, predano 13824K, rezervirano 1060864K prostor klase korišteno 1599K, kapacitet 1740K, počinjeno 1792K, rezervirano 1048576K

Ova aplikacija koristi G1 ili GC algoritam koji prvo koristi smeće:

  • Prvi redak izvještava o trenutnoj veličini hrpe kao 202 MB (206848 K) - također se koristi 42 MB (43061 K)
  • G1 regije veličine su 1 MB, postoje 43 regije označene kao mlade, a 3 kao preživjeli prostor
  • Trenutni kapacitet metaprostora je oko 13,5 MB (13724 K). Od tih 13,5 MB koristi se oko 12,5 MB (12983 K). Također, možemo imati do 1 GB metaprostora (1048576 K). Štoviše, zajamčeno je da će 13842 KB biti dostupno za korištenje Java virtualnog stroja, poznatog i kao namjenska memorija
  • Posljednji redak pokazuje koliko se metaprostora koristi za pohranu podataka o klasi

Ovaj se izlaz može mijenjati ovisno o GC algoritmu. Na primjer, ako pokrenemo istu aplikaciju Quarkus sa ZGC putem “-XX: + OtključajEksperimentalneVMOptions -XX: + Koristi ZGC”:

ZHeap korišten 28M, kapacitet 200M, maksimalan kapacitet 1024M Metaspace korišten 21031K, kapacitet 21241K, predano 21504K, rezervirano 22528K

Kao što je gore prikazano, koristimo 28 MB hrpe i oko 20 MB metaprostora. Od ovog pisanja, Intellij IDEA još uvijek koristi CMS GC sa sljedećim podacima o hrpi:

par nove generacije ukupno 613440K, rabljeno 114299K eden prostor 545344K, 18% iskorišteno iz svemira 68096K, 16% naviknuto u svemir 68096K, 0% korišteno istodobno generiranje oznake-pomicanja ukupno 1415616K, korišteno 213479K Metaspace korišteno 423107K, kapacitet 439976K, predano 440416K, rezervirano 1429504K prostor klase korišten 55889K, kapacitet 62488K, predano 62616K, rezervirano 1048576K

Klasičnu generacijsku prirodu CMS GC možemo uočiti u konfiguraciji hrpe.

3. jstat

Pored jcmd, možemo koristiti jstat kako biste saznali iste podatke iz pokrenutih aplikacija. Na primjer, možemo koristiti jstat -gc da biste vidjeli statistiku hrpe:

$ jstat -gc 4309 S0C S1C S0U S1U EC EU OC OU MC 0,0 0,0 0,0 0,0 129024,0 5120,0 75776,0 10134,6 20864,0 MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCTGCT 19946,2 2688,0 2355,0 2 0,0007 1 0,07 1 0,07 1 0,07 1 0,07 1

Svaki stupac predstavlja kapacitet memorije ili iskorištenost određenog područja memorije:

  • S0C - Kapacitet za prvi preživjeli prostor
  • S1C - Kapacitet za drugi preživjeli prostor
  • S0U - Korišteni prostor prvog preživjelog
  • S1U - Korišteni prostor drugog preživjelog
  • EC - kapacitet prostora Eden
  • EU - Korišteni prostor s Edena
  • OC - ​​Kapacitet stare generacije
  • OU - Korišteni prostor stare generacije
  • MC - Kapacitet metaprostora
  • MU - Korišteni prostor iz Metaspacea
  • CCSC - Kapacitet prostora komprimirane klase
  • CCSU - Korišteni prostor za komprimirane klase
  • YGC - Broj maloljetničkih GC-a
  • YGCT - Vrijeme provedeno za manje GC-ove
  • FGC - broj punih GC-a
  • FGCT - Vrijeme provedeno za pune GC-ove
  • CGC - broj istodobnih GC-a
  • CGCT - Vrijeme provedeno na istodobnim GC-ima
  • GCT - vrijeme provedeno za sve GC-ove

Postoje i druge opcije povezane s memorijom za jstat kao što su:

  • The -gkapacitet izvijestiti o različitim kapacitetima za različita područja memorije
  • The -gcutil prikazuje samo postotak iskorištenosti svake regije
  • -Uzrok je isto što i -gcutil ali dodaje uzrok posljednjeg GC-a i eventualno trenutnih GC događaja

4. Argumenti naredbenog retka

Ako pokrenemo Java program s opcijama konfiguracije hrpe (na primjer, -Xms i -Xmx), zatim nekoliko drugih trikova za pronalaženje navedenih vrijednosti.

Na primjer, evo kako jps izvještava o tim vrijednostima:

$ jps -lv 4309 quarkus.jar -Xms200m -Xmx1g

Ovim pristupom možemo pronaći samo ove statičke vrijednosti. Dakle, ne postoji način da se zna za, recimo, trenutno počinjeno sjećanje.

Pored jps, nekoliko drugih alata izvijestit će o istoj stvari. Na primjer, “Jcmd VM.command_line” također će izvijestiti ove detalje:

$ jcmd 4309 VM.command_line 4309: VM Argumenti: jvm_args: -Xms200m -Xmx1g java_command: quarkus.jar java_class_path (početni): quarkus.jar Tip pokretača: SUN_STANDARD

Također, na većini Unix-baziranih sustava koje možemo koristiti p.s od procps paket:

$ ps -ef | grep quarkus ... java -Xms200m -Xmx1g -jar quarkus.jar

Napokon, na Linuxu možemo koristiti / proc virtualni datotečni sustav i njegove pid-datoteke:

$ cat / proc / 4309 / cmdline java -Xms200m -Xmx1g -jar quarkus.jar

The cmdline datoteka u direktoriju nazvanom po Quarkus pid sadrži unos naredbenog retka za aplikaciju.

5. Zaključak

U ovom smo brzom uputstvu vidjeli nekoliko različitih načina za dobivanje veličine hrpe Java programa koji radi.