10 Opțiuni importante JVM pentru producția Sistem de aplicație JAVA

Cunoașteți opțiunile esențiale JVM (Java Virtual Machine) pentru o mai bună performanță și depanare.


Dacă sunteți un dezvoltator Java sau un administrator de middleware, atunci ar trebui să știți ce înseamnă opțiunile JVM împreună cu importanța lor și modul în care acestea afectează aplicația dvs. Să le aflăm.

Prezentare generală a opțiunilor JVM

Vorbind despre opțiunile JVM, atunci există trei tipuri de opțiuni pe care le puteți include în opțiunile dvs. JVM, standard, nestandard și avansat. Dacă încercați o opțiune avansată, utilizați întotdeauna opțiunea cu -XX. În mod similar, dacă aplicați o opțiune non-standard, utilizați -X. Opțiunile standard nu preplătesc nimic opțiunii.

Ce opțiuni JVM sunt utilizate de aplicația dvs.?

Dacă aplicația rulează pe Linux, puteți utiliza ps -ef | grep java pentru a identifica procesul Java și a privi opțiunile JVM tipărite ca argumente de proces. Dacă mai multe procese Java se derulează în sistem, atunci poate fi necesar să mergeți cu un cuvânt cheie unic pentru aplicația dvs. Java.

Dacă argumentul dvs. este prea lung, atunci încercați să folosiți ps -auxww deoarece această comandă va afișa și o listă lungă de argumente.

După ce aveți o listă cu steagurile JVM, vă puteți face o idee despre comportamentele oricărei aplicații Java, de exemplu, Tomcat.

Dimensiunea Java heap

 -xms – setați dimensiunea inițială a grămadă Java
-xmx – setați dimensiunea maximă a grămezii Java
-XSS – setați dimensiunea stivei de fir Java

-Xms – Această opțiune este de a defini dimensiunea de pornire a heap-ului pentru JVM, de exemplu, Xms2048m, ceea ce înseamnă că o dimensiune inițială a acumulatorului este de 2 GB în jur. Deci, când începe un JVM, memoria de acumulare va fi atât de mare. Surprinzător da! Aceasta se realizează pentru a preveni redimensionarea în timpul pornirii și pentru a îmbunătăți timpul de pornire al JVM.

-Xmx – Această opțiune este de a defini dimensiunea maximă a acumulatorului de JVM, de exemplu, Xmx2048m, ceea ce înseamnă că dimensiunea maximă a acumulatorului va fi de numai 2 GB.

În mod esențial, veți avea întotdeauna-Xmsand-Xmx împreună.

Setați procentul de grămadă

-XX: MaxHeapFreeRatio – stabilește procentul maxim de liberă haldă după GC pentru a evita micșorarea.

-XX: MinHeapFreeRatio – stabilește procentul minim de heap liber după GC pentru a evita extinderea; pentru a monitoriza utilizarea haldei, puteți utiliza JCosole.

Activați schimbul de date de clasă

Specificați opțiunea Xshareclasses pentru a activa partajarea datelor de clasă într-o memorie cache partajată. JVM se conectează la o memorie cache existentă sau creează un cache dacă nu există. Puteți avea mai multe memorii cache și puteți specifica memoria cache corectă adăugând o subopțiune la opțiunea -Xshareclasses.

Dimensiunea PermGen

Opțiunile JVM anterioare definesc dimensiunea memoriei heap, dar -XX: PermSize este pentru a defini dimensiunea spațiului PermGen, unde se salvează pool-ul de șiruri și metadatele clasei. Această opțiune este deosebit de eficientă pentru un server web precum Tomcat, care încarcă de multe ori clase de aplicație web în timpul implementării.

Apropo, merită să ne dăm seama că spațiul PermGen este preluat de Metaspace în Java 8 și această opțiune nu se aplică dacă executați cu JRE 8 JVM.

Tipărire GC

-verbose: gc – jurnalele de gunoi rulează și cât durează.
-XX: PrintGCDetails + – include datele de la -verbose: gc, dar adaugă și informații despre dimensiunea noii generații și date mai precise.
-XX: -PrintGCTimeStamps – Tipăriți marcatele de timp la colectarea gunoiului.

Aceste opțiuni JVM sunt utilizate pentru a permite înregistrarea colectării gunoiului, care este extrem de eficient pentru operarea sensibilă la latență. Obișnuiam să fim pe sisteme în care căutăm latențe la microsecunde și, dacă recunoașteți, o colectare mare de gunoi poate dura câteva milisecunde.

Așadar, apelăm la o arhitectură GC gratuită, cum ar fi perturbatorul LMAX, dar, într-adevăr, dacă nu mergeți la o aplicație sensibilă la latență, această opțiune la îndemână vă va recomanda statistici importante ale GC. Vă va oferi dacă este vorba despre colectarea gunoiului mare sau minor, ce fel de colectoare de gunoi este aplicat, cât de des este restabilit memoria și cât timp a ținut, etc..

Se gestionează eroarea „OutOfMemory”

Pentru a declanșa depozitarea heap-ului din memoria, puteți utiliza -XX: + HeapDumpOnOutOfMemoryError

Această opțiune JVM produce un dump de stivă atunci când JVM moare cu OutOfMemory Error. Nu există nicio cheltuială, cu excepția cazului în care apare o OOM cu adevărat. Acest steag este o condiție necesară pentru sistemele de producție, deoarece este de obicei singura modalitate de a determina profund problema.

Depunerea de grămezi va fi configurată în mod implicit în „directorul curent” al JVM. Dacă doriți să creați halde de gunoi pe un anumit director, atunci executați

-XX: HeapDumpPath = [directorul path-to-heap-dump]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

Fișierul de descărcare de gunoi poate avea dimensiuni uriașe, până la gigabyte, deci asigurați-vă că sistemul de fișiere țintă permite o capacitate suficientă.

Dacă dorim să repornim serverul imediat după apariția memoriei, atunci putem seta acest parametru în același scop –

XX: OnOutOfMemoryError ="oprire -r"

Urmăriți descărcarea și descărcarea clasei

-XX: + TraceClassLoading și -XX: + TraceClassUnloading sunt două opțiuni JVM pe care le folosim pentru a imprima informații de jurnal de fiecare dată când clasele se încarcă în JVM sau se descarcă din JVM. Aceste indicatoare JVM sunt utile dacă aveți orice tip de scurgere de memorie legată de încărcător de clasă și suspectați că clasele nu se descarcă sau se colectează gunoiul.

Cale de clasă Java

Vorbind despre JAVA Classpath apoi-Xbootclasspath specifică intrările de clasă pe care dorim să le încărcăm fără verificare. JVM verifică toate clasele pe care le încarcă pentru a se asigura că nu încearcă să anuleze un obiect cu o int, pop de intrări suplimentare din stivă sau să împingă prea multe, etc.. 

Introducerea clasei pe bootclasspath deasează și costul, dar trebuie utilizat doar atunci când știi că clasele au fost verificate de mai multe ori înainte. În JRuby, acest timp de pornire redus la jumătate și mai mult pentru un script simplu.

profilare

Profilarea Java este procesul de monitorizare a diferiților parametri de niveluri JVM, cum ar fi execuții de metodă, execuții fire, colecții de gunoi și creări de obiecte. Profilarea Java vă oferă o vedere mai bună a execuției aplicației dvs. țintă și a utilizării resurselor acesteia.

-Xprof
-Xrunhprof

Mediu pe 64 de biți

În mediul de operare unde sunt instalate ambele pachete de 32 și 64 de biți, JVM alege automat pachetele de mediu pe 32 de biți ca implicit.

Dacă dorim să setăm mediul pe 64 biți manual, putem face acest lucru folosind parametrul -d. Și, evident, bitul OS poate fi fie 32, fie 64.

Concluzie

Sper că acest lucru vă va ajuta să configurați parametrii JVM pentru aplicația dvs. Dacă sunteți interesat să aflați în profunzime despre gestionarea memoriei java, consultați acest lucru Curs Udemy.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map