10 Důležité možnosti JVM pro produkční aplikační systém JAVA

Seznamte se s nezbytnými možnostmi JVM (Java Virtual Machine) pro lepší výkon a ladění.


Pokud jste vývojář Java nebo správce middlewaru, měli byste vědět, co znamenají možnosti JVM, jejich význam a dopad na vaši aplikaci. Pojďme je zjistit.

Přehled možností JVM

Když už mluvíme o možnostech JVM, pak existují tři typy možností, které můžete zahrnout do svého JVM, standardní, nestandardní a pokročilé možnosti. Pokud vyzkoušíte pokročilé možnosti, vždy použijte volbu s -XX. Podobně, pokud používáte nestandardní možnost, použijete -X. Standardní možnosti tuto možnost nepřipojují.

Které možnosti JVM používá vaše aplikace?

Pokud je aplikace spuštěna v systému Linux, můžete použít ps -ef | grep java identifikovat proces Java a podívat se na možnosti JVM vytištěné jako argumenty procesu. Pokud v systému běží více než jeden proces Java, možná budete muset jít s klíčovým slovem, které je jedinečné pro vaši aplikaci Java.

Pokud je váš argument příliš dlouhý, zkuste použít ps -auxww, protože tento příkaz také zobrazí dlouhý seznam argumentů.

Po získání seznamu příznaků JVM můžete získat představu o chování jakékoli Java aplikace, např. Tomcat.

Velikost haldy Java

 -Xms – nastavit počáteční velikost haldy Java
-Xmx – nastavit maximální velikost haldy Java
-Xss – nastavit velikost zásobníku vláken Java

-Xms – Tato možnost je definovat počáteční velikost haldy pro JVM, např. Xms2048m, což znamená, že počáteční velikost haldy JVM je kolem 2 GB. Když tedy začne JVM, paměť haldy bude tak velká. Překvapivě ano! To se provádí, aby se zabránilo změně velikosti během spouštění a prodloužila se doba spuštění JVM.

-Xmx – Tato možnost je definovat maximální velikost haldy JVM, např. Xmx2048m, což znamená, že maximální velikost haldy JVM bude pouze 2 GB.

V zásadě budete mít vždy společně Xmsand-Xmx.

Nastavte procento haldy

-XX: MaxHeapFreeRatio – nastavuje maximální procento volné haldy po GC, aby nedošlo ke zmenšení.

-XX: MinHeapFreeRatio – nastavuje minimální procento volné haldy po GC, aby se zabránilo expanzi; Chcete-li sledovat využití haldy, můžete použít JCosole.

Povolit sdílení dat třídy

Chcete-li povolit sdílení dat třídy ve sdílené mezipaměti tříd, zadejte možnost Xshareclasses. JVM se připojí k existující mezipaměti nebo vytvoří mezipaměť, pokud taková neexistuje. Můžete mít více mezipaměti a můžete určit správnou mezipaměť přidáním suboption do volby -Xshareclasses.

PermGen Velikost

Dřívější volby JVM definují velikost paměti haldy, ale -XX: PermSize je definování velikosti prostoru PermGen, kde se ukládají řetězce řetězců a metadata třídy. Tato možnost je zvláště účinná pro webový server, jako je Tomcat, který během nasazení často načítá třídy webové aplikace.

Mimochodem, stojí za to si uvědomit, že prostor PermGen je převzat Metaspace v Java 8, a tato možnost není použitelná, pokud používáte JRE 8 JVM.

Tisk GC

-verbose: gc – protokoly spustí sběratel odpadu a jak dlouho to trvá.
-XX: + PrintGCDetails – zahrnuje data z -verbose: gc, ale také přidává informace o velikosti nové generace a přesnější načasování.
-XX: -PrintGCTimeStamps – Tisk časových razítek při sběru odpadu.

Tyto možnosti JVM se používají k povolení protokolování odpadu, což je vysoce efektivní pro operaci citlivou na latenci. Bývali jsme na systémech, kde hledáme mikrosekundy, a pokud poznáte, velká sbírka odpadu může trvat několik milisekund.

Takže jdeme na architekturu GC zdarma, jako je disruptor LMAX, ale pokud nechcete používat aplikaci citlivou na ultra latenci, tato užitečná možnost vám poradí důležité statistiky GC. Získáte, zda se jedná o velkou nebo malou sbírku odpadků, jaký druh sběrače odpadků se používá, jak často se obnovuje paměť a kolik času se v ní nachází atd..

Chyba zpracování chyby „OutOfMemory“

Chcete-li spustit výpis haldy z paměti, můžete použít -XX: + HeapDumpOnOutOfMemoryError

Tato možnost JVM vytvoří výpis ze zásobníku, když vaše JVM zemře s chybou OutOfMemory. Nejsou zahrnuty žádné náklady, pokud se OOM skutečně neobjeví. Tento příznak je nezbytný pro produkční systémy, protože je to obvykle jediný způsob, jak problém hluboce určit.

Výpis haldy bude ve výchozím nastavení nastaven v „aktuálním adresáři“ JVM. Pokud si přejete vytvořit skládky haldy v konkrétním adresáři, pak spusťte

-XX: HeapDumpPath = [adresář výpisu cesty k haldě]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

Soubor výpisu haldy může být obrovský, až do gigabajtů, takže se ujistěte, že cílový souborový systém umožňuje dostatečnou kapacitu.

Pokud chceme restartovat server ihned poté, co dojde nedostatek paměti, můžeme tento parametr nastavit stejným způsobem –

XX: OnOutOfMemoryError ="vypnout -r"

Sledování a vykládání tříd

-XX: + TraceClassLoading a -XX: + TraceClassUnloading jsou dvě možnosti JVM, které používáme k tisku informací o protokolování, kdykoli se třídy načítají do JVM nebo uvolňují z JVM. Tyto příznaky JVM jsou užitečné, pokud máte jakýkoli únik paměti spojený s classloaderem a máte podezření, že třídy nejsou uvolňovány nebo sbírány odpadky.

Cesta třídy Java

Když mluvíme o JAVA Classpath then-Xbootclasspath, specifikuje položky třídy, které chceme načíst bez ověření. JVM ověří všechny třídy, které načte, aby se ujistil, že se nepokouší odcizit objekt s int, pop dalších položek ze zásobníku nebo příliš mnoho pushů atd.. 

Uvedení třídy na bootclasspath přeskočí také náklady, ale mělo by se použít pouze tehdy, když víte, že třídy byly dříve mnohokrát ověřeny. V JRuby to zkrátilo dobu spuštění o polovinu a více pro jednoduchý skript.

Profilování

Profilování Java je proces sledování různých parametrů úrovně JVM, jako jsou spouštění metod, provádění vláken, kolekce odpadků a vytváření objektů. Profilování Java vám poskytuje lepší přehled o provádění vaší cílové aplikace a její využití prostředků.

-Xprof
-Xrunhprof

64bitové prostředí

V prostředí OS, kde jsou nainstalovány 32 i 64bitové balíčky, JVM automaticky vybere 32bitové balíčky prostředí jako výchozí.

Pokud chceme prostředí nastavit ručně na 64 bitů, můžeme tak učinit pomocí parametru -d. A samozřejmě bit OS může být buď 32 nebo 64.

Závěr

Doufám, že vám to pomůže nakonfigurovat parametry JVM pro vaši aplikaci. Pokud máte zájem dozvědět se podrobně o správě paměti java, podívejte se na toto Kurz Udemy.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Комментариев нет, будьте первым кто его оставит

    Комментарии закрыты.

    Adblock
    detector