Ismerje meg a JVM (Java virtuális gép) alapvető lehetőségeit a jobb teljesítmény és hibakeresés érdekében.

Ha Java fejlesztő vagy köztes szoftver adminisztrátor, akkor tudnia kell, hogy a JVM opciók mit jelent fontosságukkal együtt, és hogyan befolyásolják az alkalmazást. Nézzük meg őket.

A JVM opcióinak áttekintése

A JVM opciókról beszélve, akkor háromféle lehetőség létezik, amelyeket a JVM-hez is belefoglalhat, a szokásos, a nem szabványos és a speciális opciókat. Ha kipróbál egy speciális beállítást, akkor mindig használja a -XX opcióval. Hasonlóképpen, ha nem szabványos beállítást alkalmaz, akkor a -X értéket használja. A szokásos opciók nem egészítenek semmit az opcióval szemben.

Melyik JVM opciókat használja az alkalmazás?

Ha az alkalmazás Linuxon fut, akkor használhatja a ps -ef | grep java segítségével azonosíthatja a Java folyamatot, és megnézheti a folyamat argumentumként kinyomtatott JVM beállításokat. Ha egynél több Java folyamat folyik a rendszeren, akkor szükség lehet egy olyan kulcsszóra, amely kizárólag a Java alkalmazáshoz tartozik.

Ha az argumentum túl hosszú, akkor próbálkozzon a ps -auxww használatával, mivel ez a parancs hosszú argumentumlista is megjelenik.

Miután megkapta a JVM zászlók listáját, megismerheti bármilyen Java alkalmazás, például a Tomcat viselkedését..

Java halom mérete

 -XMS – állítsa be a Java kezdeti méretét
-xmx – állítsa be a Java maximális halom méretét
-XSS – állítsa be a java szálköteg méretét

-Xms – Ez a lehetőség a kezdő kupac méretének meghatározása a JVM számára, például Xms2048m, ami azt jelenti, hogy a JVM kezdeti kupac mérete 2 GB körül van. Tehát, amikor elindul egy JVM, a halom memória ilyen nagy lesz. Meglepően igen! Ez azért van, hogy megakadályozzák az átméretezést az indítás során, és javítsák a JVM indítási idejét.

-Xmx – Ez a lehetőség határozza meg a JVM maximális kupac méretét, például Xmx2048m, ami azt jelenti, hogy a JVM maximális kupac mérete csak 2 GB.

Alapvetően mindig-Xmsand-Xmx leszel együtt.

Állítsa be a halom százalékát

-XX: MaxHeapFreeRatio – beállítja a kukoricamennyiség maximális százalékát a GC után a zsugorodás elkerülése érdekében.

-XX: MinHeapFreeRatio – meghatározza a GC utáni kukoricamennyiség minimális százalékát a terjedés elkerülése érdekében; A kupachasználat ellenőrzéséhez használhatja a JCosole-t.

Az osztályos adatmegosztás engedélyezése

Adja meg az Xshareclasses lehetőséget az osztályadatok megosztásának engedélyezéséhez egy megosztott osztály-gyorsítótárban. A JVM csatlakozik egy meglévő gyorsítótárhoz, vagy létrehoz egy gyorsítótárat, ha az nem létezik. Több gyorsítótár is lehet, és a helyes gyorsítótárat megadhatja egy alopció hozzáadásával a -Xshareclasses opcióhoz..

PermGen méret

A JVM korábbi beállításai meghatározzák a halom memória méretét, de -XX: A PermSize a PermGen terület méretét határozza meg, ahol a karakterlánckészlet és az osztály metaadatait menti. Ez az opció különösen hatékony olyan webszerver esetén, mint a Tomcat, amely a telepítés során gyakran betölti a webalkalmazás osztályait.

Mellesleg, érdemes rájönni, hogy a PermGen helyet a Metaspace veszi át a Java 8-ban, és ez a lehetőség nem alkalmazható, ha JRE 8 JVM-mel fut..

Nyomtasson GC-t

-bőbeszédű: gc – naplózza a hulladékgyűjtőt és mennyi ideig tart.
-XX: + PrintGCDetails – tartalmazza a -verbose: gc adatait, de információkat ad az új generáció méretéről és a pontosabb időzítésekről is.
-XX: -PrintGCTimeStamps – Időbélyegek nyomtatása a szemétgyűjtésnél.

Ezeket a JVM opciókat a hulladékgyűjtés naplózásának lehetővé tételére használják, ami rendkívül hatékony a késés-érzékeny műveletnél. Régebben olyan rendszereken voltunk, ahol mikrosekundum-latenciákat keresünk, és ha felismeri, egy nagy hulladékgyűjtés több milliszekundumot is igénybe vehet..

Tehát a GC ingyenes architektúráját keressük, mint például az LMAX zavaróját, de ha valójában nem ultra latencia-érzékeny alkalmazásokra törekszik, ez a praktikus opció fontos GC statisztikákat nyújt. Megkérdezi, hogy nagy vagy kisebb hulladékgyűjtés, milyen szemétgyűjtőt alkalmaznak, milyen gyakran helyreállítja a memóriát, mennyi ideig tartott, stb..

Az „OutOfMemory” hiba kezelése

Ha a memóriából ki akarja dobni a halommennyiséget, akkor használja a -XX: + HeapDumpOnOutOfMemoryError

Ez a JVM opció veremlerakódást eredményez, amikor a JVM OutOfMemory hibával hal meg. Nincs szükség ráfordításra, kivéve ha ténylegesen történik OOM. Ez a jelölés szükséges a termelési rendszerek számára, mivel általában ez az egyetlen módja a probléma mély meghatározására.

A halomlerakót alapértelmezés szerint a JVM „aktuális könyvtárában” állítják be. Ha halomlerakókat szeretne létrehozni egy adott könyvtárban, akkor futtassa

-XX: HeapDumpPath = [elérési út-a-halom-dump-könyvtár]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

A halom dump fájl hatalmas méretű lehet, akár gigabájtig is, tehát biztosítsa, hogy a cél fájlrendszer megfelelő kapacitást biztosítson.

Ha azt szeretnénk, hogy azonnal újraindítsuk a kiszolgálót, miután a memóriából kifogytunk, akkor ugyanazt a célt állíthatjuk be –

XX: OnOutOfMemoryError ="shutdown -r"

Nyomkövetési osztály- és kirakodás

-XX: + TraceClassLoading és -XX: + TraceClassUnloading két JVM opció, amelyeket naplózási információk kinyomtatására használunk, amikor az osztályok betöltődnek a JVM-be vagy a JVM-ből történő kirakodáshoz. Ezek a JVM jelzők akkor hasznosak, ha bármilyen típusú memóriaszivárgás kapcsolódik az osztálytöltőhöz, és gyanítja, hogy az osztályok nem ürítik vagy gyűjtik a szemét.

Java osztályút

A JAVA Classpath-ről, majd az Xbootclasspath-ről meghatározzuk az osztályút-bejegyzéseket, amelyeket ellenőrzés nélkül szeretnénk betölteni. A JVM ellenőrzi az összes betöltött osztályt, hogy megbizonyosodjon arról, hogy nem próbál megcélozni egy objektumot egy int-vel, extra bejegyzéseket nem jelenít meg a veremből, vagy túl sokat nyomni és így tovább. 

Az osztály osztályba helyezése a bootclasspath-ra is átugorja a költségeket, de csak akkor szabad használni, ha tudja, hogy az osztályokat korábban már többször ellenőrizték. A JRuby-ban ez az egyszerű szkript felére és még felére csökkentette az indítási időt.

Profilírozó

A Java profilkészítés a különböző JVM szintű paraméterek, például a módszer végrehajtása, a szál végrehajtása, a szemétgyűjtés és az objektum létrehozása figyelési folyamatát jelenti. A Java Profiling finomabb képet nyújt a cél alkalmazás végrehajtásáról és annak erőforrás-felhasználásáról.

-Xprof
-Xrunhprof

64 bites környezet

Az operációs rendszer környezetében, ahol mind a 32, mind a 64 bites csomagok telepítve vannak, a JVM alapértelmezés szerint automatikusan kiválasztja a 32 bites környezeti csomagokat.

Ha a környezetet 64 bitesre szeretnénk manuálisan beállítani, akkor ezt a -d paraméter használatával tehetjük meg. És természetesen az OS bit lehet 32 ​​vagy 64.

Következtetés

Remélem, hogy ez segít a JVM paraméterek konfigurálásában az alkalmazás számára. Ha érdekli a java memória kezelésének alapos ismerete, akkor nézd meg ezt Udemy tanfolyam.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me