Leer ken belangrike JVM-opsies (Java Virtual Machine) vir beter prestasie en ontfouting.
As u 'n Java-ontwikkelaar of middelware-administrateur is, moet u weet wat die JVM-opsies beteken, saam met die belangrikheid daarvan, en hoe dit u toepassing beïnvloed. Laat ons dit uitvind.
0.1 Oorsig oor JVM-opsies
0.2 Watter JVM-opsies word deur u aansoek gebruik??
2 Stel persentasie van die hoop op
3 Aktiveer klasdatadeling
5 Druk GC
6 Hantering van 'OutOfMemory'-fout
7 Spoor klas-en aflaai af
10 64-bis omgewing
Oorsig oor JVM-opsies
As u van JVM-opsies praat, is daar drie soorte opsies wat u by u JVM-, standaard-, nie-standaard- en gevorderde opsies kan insluit. As u 'n gevorderde opsie probeer, gebruik u altyd die opsie met -XX. As u 'n nie-standaardopsie toepas, gebruik u -X. Standaardopsies hang nie van die opsie af nie.
Watter JVM-opsies word deur u aansoek gebruik??
As die toepassing op Linux loop, kan u ps -ef | grep java om die Java-proses te identifiseer en kyk na die JVM-opsies wat as prosesargumente gedruk is. As daar meer as een Java-proses aan die gang is, moet u miskien 'n sleutelwoord gebruik wat uniek is aan u Java-toepassing.
As u argument te lank is, probeer dan om ps -auxww te gebruik, want hierdie opdrag bevat ook 'n lang argumente-lys.
Nadat u 'n lys met JVM-vlae het, kan u 'n idee kry van die gedrag van enige Java-toepassing, byvoorbeeld Tomcat.
-XMS – stel aanvanklike Java-hoopgrootte in
-Xmx – stel maksimum Java-hoopgrootte in
-XSS – stel Java-draadstapelgrootte in
-Xms – Hierdie opsie is om die beginhoopgrootte vir JVM te definieer, byvoorbeeld Xms2048m, wat beteken dat die aanvanklike hoopgrootte van JVM ongeveer 2 GB is. Dus, as 'n JVM begin, sal die hoopgeheue soveel groot wees. Verbasend ja! Dit word gedoen om die grootte van die grootte tydens die opstart te voorkom en om die opstartyd van JVM te verbeter.
-Xmx – Hierdie opsie is om die maksimum hoopgrootte van JVM te definieer, byvoorbeeld Xmx2048m, wat beteken dat die maksimum hoopgrootte van JVM slegs 2 GB sal wees.
U sal in wese altyd-Xmsand-Xmx saam hê.
Stel persentasie van die hoop op
-XX: MaxHeapFreeRatio – stel die maksimum persentasie hoop vry na GC vry om krimp te voorkom.
-XX: MinHeapFreeRatio – stel die minimum persentasie hoop vry na GC vry om uitbreiding te voorkom; om die hoopgebruik te monitor, kan u JCosole gebruik.
Spesifiseer Xshareclasses-opsie om klasgegewens in 'n gedeelde klasgeheue te deel. Die JVM maak 'n verbinding met 'n bestaande kas of skep 'n kas as dit nie bestaan ​​nie. U kan veelvuldige cache hê, en u kan die korrekte kas spesifiseer deur 'n subopsie by die -Xshareclasses-opsie te voeg.
Vroeëre JVM-opsies definieer die grootte van die geheue, maar -XX: PermSize is om die grootte van PermGen-ruimte te definieer, waar die snaarpoel en klasmetadata gestoor word. Hierdie opsie is veral effektief vir 'n webbediener soos Tomcat, wat gereeld klasse van die webtoepassing tydens ontplooiing laai.
Terloops, dit is die moeite werd om te besef dat die PermGen-ruimte deur Metaspace in Java 8 oorgeneem word, en hierdie opsie is nie van toepassing as u met JRE 8 JVM hardloop nie.
-verbose: gc – logs vullisversamelaar loop en hoe lank dit neem.
-XX: + PrintGCDetails – bevat die data van -verbose: gc, maar voeg ook inligting oor die grootte van die nuwe generasie en meer akkurate tydsberekening by.
-XX: -PrintGCTimeStamps – Druk tydstempels by vullisversameling uit.
Hierdie JVM-opsies word gebruik om die vullisverwydering aan te meld, wat baie effektief is vir die vertragingsgevoelige werking. Ons was voorheen op stelsels waar ons mikrosekonde-vertragings soek, en as u dit herken, kan 'n groot vullisversameling etlike millisekondes duur.
Ons gaan dus vir GC-gratis argitektuur soos LMAX-ontwrigter, maar as u inderdaad nie vir 'n ultra latency-sensitiewe toepassing is nie, sal hierdie handige opsie u belangrike GC-statistieke aanbeveel. Dit kry u of dit 'n groot of klein vullisversameling is, watter soort vullisversamelaar toegepas word, hoe gereeld die geheue herstel word, en hoeveel tyd dit gehou het, ens..
Hantering van 'OutOfMemory'-fout
Om hope dump uit die geheue te aktiveer, kan u -XX gebruik: + HeapDumpOnOutOfMemoryError
Hierdie JVM-opsie lewer 'n stapelstorting wanneer u JVM sterf met OutOfMemory-fout. Daar is geen onkoste daaraan verbonde nie, tensy 'n OOM regtig plaasvind. Hierdie vlag is 'n vereiste vir produksiestelsels, aangesien dit gewoonlik die enigste manier is om die probleem diep te bepaal.
Die stapelhoop word standaard in die "huidige gids" van die JVM opgestel. As u hope dumps op 'n spesifieke gids wil skep, hardloop dan
-XX: HeapDumpPath = [path-to-heap-dump-directory]
-XX: OnOutOfMemoryError ="< cmd argumenteer >;< cmd argumenteer >"
Die hoophooplêer kan groot wees, tot gigagrepe, so verseker dat die teikenlêerstelsel voldoende kapasiteit toelaat.
As ons die bediener wil herbegin onmiddellik nadat daar geen geheue is nie, kan ons hierdie parameter met dieselfde doel instel –
XX: OnOutOfMemoryError ="afsluit -r"
Spoor klas-en aflaai af
-XX: + TraceClassLading en -XX: + TraceClassUnloading is twee JVM-opsies wat ons gebruik om loginligting te druk wanneer klasse by JVM laai of van JVM afgelaai word. Hierdie JVM-vlae is nuttig as u enige geheue-lekkasie het wat aan die klaslaaier gekoppel is en daaraan vermoed word dat klasse nie los of vullis afgehaal word nie.
As ons praat oor die JAVA Classpath-dan-Xbootclasspath, word die klaspaadjie-inskrywings gespesifiseer wat ons sonder verifikasie wil laai. Die JVM verifieer alle klasse wat gelaai word om te verseker dat hy nie probeer om 'n voorwerp met 'n int, 'n pop ekstra inskrywings van die stapel af te skuif of te veel te druk nie, ensovoorts.
Om die klas op die bootclasspath te plaas, spring ook die koste oor, maar dit moet slegs gebruik word as u weet dat die klasse al baie keer vantevore geverifieer is. In JRuby het dit die opstartyd met die helfte verminder en meer vir 'n eenvoudige skrif.
Java Profiling is die proses om verskillende parameters op die JVM-vlakke te monitor, soos metode-uitvoerings, draaduitvoerings, vullisversamelings en objek-skeppings. Met Java Profiling kan u ook 'n fyner beeld kry van die uitvoering van u doelwitte en die gebruik van die hulpbronne.
In die OS-omgewing waar beide 32- en 64-bis-pakkette geïnstalleer is, kies die JVM outomaties 32-bis-omgewingspakkette as standaard.
As ons die omgewing handmatig op 64 bit wil instel, kan ons dit doen met behulp van -d-parameter. En uiteraard kan die OS-bit óf 32 óf 64 wees.
Ek hoop dit help u om JVM-parameters vir u aansoek op te stel. As u geïnteresseerd wil wees in diepte te leer oor die bestuur van Java-geheue, gaan kyk hierna Udemy-kursus.