Sprievodca najdôležitejšími parametrami JVM

1. Prehľad

V tomto rýchlom výučbe preskúmame najznámejšie možnosti, ktoré možno použiť na konfiguráciu virtuálneho počítača Java.

2. Explicitná halda pamäte - možnosti Xms a Xmx

Jedným z najbežnejších postupov súvisiacich s výkonom je inicializácia haldy pamäte podľa požiadaviek aplikácie.

Preto by sme mali určiť minimálnu a maximálnu veľkosť haldy. Na jeho dosiahnutie je možné použiť nasledujúce parametre:

-Xms [jednotka] -Xmx [jednotka]

Tu, jednotka označuje jednotku, v ktorej je pamäť (označená veľkosť haldy) sa má inicializovať. Jednotky je možné označiť ako „G“ pre GB, „M“ pre MB a „K“ pre KB.

Napríklad, ak chceme JVM priradiť minimálne 2 GB a maximálne 5 GB, musíme napísať:

-Xms2G -Xmx5G

Počnúc Java 8, veľkosť Metaspace nie je definované. Akonáhle dosiahne globálny limit, JVM ho automaticky zvýši. Aby sme však prekonali zbytočnú nestabilitu, môžeme nastaviť Metaspace veľkosť s:

-XX: MaxMetaspaceSize = [jednotka]

Tu, veľkosť metaspace označuje množstvo pamäte, ktorú chceme priradiť Metaspace.

Podľa pokynov spoločnosti Oracle je po celkovej dostupnej pamäti druhým najvplyvnejším faktorom podiel haldy vyhradenej pre mladú generáciu. Štandardne je minimálna veľkosť YG 1310 MBa maximálna veľkosť je neobmedzene.

Môžeme ich priradiť výslovne:

-XX: NewSize = [jednotka] -XX: MaxNewSize = [jednotka]

3. Zber odpadu

Pre lepšiu stabilitu aplikácie je výber správneho algoritmu Garbage Collection kritický.

JVM má štyri typy GC implementácie:

  • Sériový zberač odpadu
  • Paralelný zberač odpadu
  • CMS Garbage Collector
  • Zberač odpadu G1

Tieto implementácie je možné deklarovať pomocou nasledujúcich parametrov:

-XX: + UseSerialGC -XX: + UseParallelGC -XX: + USeParNewGC -XX: + UseG1GC

Viac podrobností na Zber odpadu implementácie nájdete tu.

4. Protokolovanie GC

Aby sme prísne sledovali stav aplikácie, mali by sme vždy skontrolovať JVM Zber odpadu výkon. Najjednoduchší spôsob, ako to urobiť, je prihlásiť sa GC činnosť v ľudsky čitateľnom formáte.

Pomocou nasledujúcich parametrov môžeme prihlásiť GC činnosť:

-XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = -XX: GCLogFileSize = [jednotka] -Xloggc: /path/to/gc.log

UseGCLogFileRotation určuje politiku rolovania protokolových súborov, podobne ako log4j, s4lj atď. NumberOfGCLogFiles označuje maximálny počet súborov denníka, ktoré je možné zapísať pre jeden životný cyklus aplikácie. GCLogFileSize určuje maximálnu veľkosť súboru. Nakoniec log označuje jeho polohu.

Tu je potrebné poznamenať, že sú k dispozícii ďalšie dva parametre JVM (-XX: + PrintGCTimeStamps a -XX: + PrintGCDateStamps), ktoré je možné použiť na tlač časovej pečiatky podľa dátumu GC log.

Napríklad, ak chceme priradiť maximálne 100 GC súbory s maximálnou veľkosťou 50 MB a chcete ich uložiť do priečinka „/ home / user / log / ' umiestnenie, môžeme použiť nižšie uvedenú syntax:

-XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = 10 -XX: GCLogFileSize = 50M -Xloggc: /home/user/log/gc.log

Problém však je, že na sledovanie systémového času na pozadí sa vždy používa jedno ďalšie vlákno démona. Toto správanie môže vytvárať určité úzke miesto výkonu; preto je vždy lepšie sa s týmto parametrom vo výrobe nehrať.

5. Zaobchádzanie s pamäťou

Je veľmi bežné, že veľká aplikácia čelí chybe pamäte, čo má za následok jej zlyhanie. Je to veľmi kritický scenár a je veľmi ťažké ho replikovať.

Preto JVM prichádza s niektorými parametrami, ktoré ukladajú haldu pamäte do fyzického súboru, ktorý je možné neskôr použiť na zisťovanie únikov:

-XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath =. / Java_pid.hprof -XX: OnOutOfMemoryError = ";" -XX: + PoužiťGCOverheadLimit

Tu je potrebné uviesť niekoľko poznámok:

  • HeapDumpOnOutOfMemoryError vydáva príkazu JVM, aby v prípade súboru uložil haldu do fyzického súboru OutOfMemoryError
  • HeapDumpPath označuje cestu, kde sa má súbor zapísať; je možné uviesť ľubovoľný názov súboru; ak však JVM nájde a tag v názve, ID procesu aktuálneho procesu spôsobujúceho chybu nedostatku pamäte bude pripojené k názvu súboru s .hprof formát
  • OnOutOfMemoryError sa používa na vydávanie núdzových príkazov, ktoré sa majú vykonať v prípade chyby nedostatku pamäte; v priestore cmd args by sa mal používať správny príkaz. Napríklad, ak chceme server reštartovať, akonáhle dôjde k nedostatku pamäte, môžeme nastaviť parameter:
-XX: OnOutOfMemoryError = "vypnutie -r"
  • Použite GCOverheadLimit je politika, ktorá obmedzuje pomer času VM, ktorý sa strávi v GC pred Nedostatok pamäte chyba je vyhodená

6. 32/64 bit

V prostredí OS, kde sú nainštalované 32 aj 64-bitové balíky, si JVM automaticky vyberie 32-bitové environmentálne balíčky.

Ak chceme nastaviť prostredie na 64 bitov ručne, môžeme to urobiť pomocou nasledujúceho parametra:

-d

Bit OS môže byť buď 32 alebo 64. Viac informácií o tomto nájdete tu.

7. Rôzne

  • -server: umožňuje „Server Hotspot VM“; tento parameter sa štandardne používa v 64-bitovom JVM
  • -XX: + UseStringDeduplication: Java 8u20 zaviedol tento parameter JVM na zníženie zbytočného využívania pamäte vytváraním príliš veľa inštancií toho istého Reťazec; toto optimalizuje haldy pamäte znížením duplikátov String hodnoty do jedného globálneho poľa char []
  • -XX: + PoužiťLWPSynchronizáciu: súpravy LWP (Ľahký proces) - politika synchronizácie založená na synchronizácii založenej na vláknach
  • -XX: LargePageSizeInBytes: nastaví veľkú veľkosť stránky použitú pre haldu Java; trvá argument v GB / MB / KB; s väčšími veľkosťami stránok môžeme lepšie využívať hardvérové ​​prostriedky virtuálnej pamäte; to však môže spôsobiť väčšie veľkosti priestoru pre server PermGen, čo môže následne vynútiť zmenšenie veľkosti haldy priestoru Java
  • -XX: MaxHeapFreeRatio: nastavuje maximálne percento haldy zdarma po GC aby sa zabránilo zmenšovaniu.
  • -XX: MinHeapFreeRatio: nastavuje minimálne percento haldy zdarma po GC vyhnúť sa expanzii; na sledovanie využitia haldy môžete použiť VisualVM dodávaný s JDK.
  • -XX: SurvivorRatio: Pomer Eden/veľkosť priestoru na prežitie - napríklad, -XX: Pomer prežitia = 6 nastavuje pomer medzi každým priestor pre pozostalých a rajský priestor byť 1: 6,
  • -XX: + UseLargePages: použite veľkorozmerovú pamäť, ak ju podporuje systém; Vezmite prosím na vedomie, že OpenJDK 7 má tendenciu sa zrútiť, ak používa tento parameter JVM

  • -XX: + UseStringCache: umožňuje ukladanie do pamäte bežne pridelených reťazcov dostupných v systéme Windows String bazén

  • -XX: + UseCompressedStrings: použite a byte [] typ pre String objekty, ktoré môžu byť reprezentované v čistom formáte ASCII
  • -XX: + OptimizeStringConcat: optimalizuje sa String zreťazenie, ak je to možné

8. Záver

V tomto rýchlom článku sme sa dozvedeli o niektorých dôležitých parametroch JVM - pomocou ktorých je možné vyladiť a vylepšiť všeobecný výkon aplikácie.

Niektoré z nich možno použiť aj na účely ladenia.

Ak chcete podrobnejšie preskúmať referenčné parametre, môžete začať tu.


$config[zx-auto] not found$config[zx-overlay] not found