Technikai cikk
Ezt a cikket frissítettük a Sun Java System Application Server 7 (korábban Sun ONE Application Server 7 (S1AS7)) és Tomcat szerverekhez egyaránt elérhető Linux és Java Desktop System (JDS) GC Portal szoftverrel. Eredetileg csak Solarisra és Windowsra volt elérhető. A GC Portal szoftver ezen verziója tartalmazza a GC Portalba integrált VisualGC-t is.
A GC Portal a JVM által generált verbose:gc
naplók bányászatával lehetővé teszi a Java-alkalmazások elemzését és teljesítményhangolását a szemétgyűjtés (GC) szempontjából. A GC Portal egy egyablakos oldal a GC-problémákkal kapcsolatban, és fehér könyvek, esettanulmányok és egyéb anyagok széles körű gyűjteményét tartalmazza. A Portált a Sun Microsystems HotSpot JVM-jével való használatra szánják, amelyet a Java 2, Standard Edition (J2SE) részeként forgalmaznak. A GC Portal használata lehetővé teszi a fejlesztők számára az alkalmazás és a JVM viselkedésének GC szemszögből történő modellezését. Ez a cikk bemutatja a GC Portal felépítését és jellemzőit, hogy a fejlesztők a GC elemzésére és hangolására szolgáló eszközként használhassák.
A GC Portal a következő kapcsolók használatát igényli a JVM-től a verbose:gc
naplók generálásához, amelyeket a Portal elemzési céllal feldolgoz.
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
A JVM további kapcsolói nem szükségesek a GC Portal számára megfelelő naplók generálásához, de a JVM és az alkalmazás hangolásához és méretezéséhez szükségesnek ítélt módon hozzáadhatók. Megjegyzés: A -XX kapcsolók nem szabványosak, és a JVM jövőbeli kiadásaiban előzetes értesítés nélkül is változhatnak.
Az alkalmazás modellezése és teljesítményhangolás a GC szempontjából
A Java-alkalmazások modellezése lehetővé teszi a fejlesztők számára a szemétgyűjtési szünetek gyakoriságának és időtartamának tulajdonítható kiszámíthatatlanság megszüntetését. Ezek a szünetek közvetlenül kapcsolódnak:
- A létrehozott és élő objektumok száma és teljes mérete
- Ezek az objektumok átlagos élettartama
A JVM heap mérete
A GC Portal által egy adott, a portálra táplált verbose:gc
naplófájlkészletre vonatkozóan nyújtott elemzés alapján a fejlesztők olyan modellt építhetnek, amely segít az alkalmazás és a JVM viselkedésének jobb megértésében.
A verbose:gc
naplók értékes információkat tartalmaznak a következőkről:
- GC szünetidők
- A GC gyakorisága
- Az alkalmazás futási ideje
- A létrehozott és megsemmisített objektumok mérete
Az objektumok létrehozásának sebessége A minden GC-nél újrahasznosított memória
Az alkalmazás viselkedése ábrázolható és elemezhető a szünetidő különböző kapcsolatainak meghatározása érdekében, a szünetek gyakorisága, az objektum létrehozásának aránya és a felszabadított memória között. Ezen információk elemzése lehetővé teheti a fejlesztők számára az alkalmazás teljesítményének hangolását, a GC gyakoriságának és a gyűjtési idők optimalizálását a legjobb halomméretek, egyéb JVM-opciók és alternatív GC-algoritmusok megadásával az adott helyzetre.
A verbose:gc naplókból származó információk a GC-viselkedés elemzésére és modellezésére
Az ilyen jellegű információk felhasználhatók a szemétgyűjtés folyamatának teljesítményhangolására.
Átlagos GC szünetek a fiatal és az öreg generációban
Az átlagos idő, amíg az alkalmazás szünetel, amíg a szemétgyűjtés a JVM-ben történik.
Átlagos GC gyakoriság a fiatal és az öreg generációban
A periodicitás, amellyel a szemétgyűjtő fut a fiatal és az öreg generációban. Ezt úgy kaphatjuk meg, hogy minden GC-tevékenység időpéldánya naplózásra kerül.
GC szekvenciális overhead
A rendszeridő azon százalékos aránya, amelyre az alkalmazás felfüggesztésre kerül a szemétgyűjtés elvégzéséhez. Kiszámítva: Avg. GC szünet * Avg. GC frequency * 100%
GC concurrent overhead
A rendszeridő százalékos aránya, amely alatt a szemétgyűjtés az alkalmazással egyidejűleg történik. Kiszámítva: Avg. concurrent GC time (sweeping phase) * Avg. concurrent GC frequency / no. of CPUs
Memory recycled by each GC in the young and old generation
The total garbage collected during each GC.
Allocation rate
The rate at which data gets allocated by the application in the young generation. Ha a fiatal generációs heap occupancy_at_start_of_current_gc=x, occupancy_at_end_of_previous_gc = y és a GC gyakorisága 1 másodpercenként, akkor az allokációs ráta körülbelül x-y másodpercenként.
Promotion rate
Az a ráta, amellyel az adatok a régi generációba kerülnek.
Total data allocated by the application
Ez az összes adat, amelyet az alkalmazás tranzakciónként allokál.
Az összes adat felosztható rövid távú adatokra és hosszú távú adatokra
A hosszú távú adatok azok, amelyek túlélik a fiatal generációs GC-ciklusokat és előléptetésre kerülnek az öreg generációba.
Rövid távú adatok
A rövid életű adatok, amelyek nagyon gyorsan meghalnak és a fiatal generációba kerülnek. Ez a következőképpen számítható ki: Összes adat – Hosszú távú adatok.
Összes aktív adat
Ez az összes, bármely időpontban élő adat. Ez kritikus fontosságú a JVM-halom méretezésére szolgáló modell felépítéséhez. Például 100 tranzakció/másodperc terhelés esetén, tranzakciónként 50K hosszú távú adatokkal, amelyek legalább 40 másodpercig tartanak, a régi generáció minimális memóriaterülete
50K*40s*100 = 200M
Memóriaszivárgások
Ezeket fel lehet fedezni, és a “memórián kívüli” hibákat jobban meg lehet érteni az egyes söpréseknél összegyűjtött szemét figyelésével, amint azt ezek a naplók mutatják.
Flags and Switches for Generating GC Logs
Egy csomó hasznos GC-vel kapcsolatos információ van, amit a JVM egy fájlba naplózhat. Ezeket az információkat a GC portál az alkalmazások és a JVM GC szempontjából történő hangolására és méretezésére használja. A részletes GC-információkat tartalmazó naplók akkor keletkeznek, ha egy Java-alkalmazás a következő kapcsolókkal fut:
– verbose:gc
Ez a jelző bekapcsolja a GC-információk naplózását. Minden JVM-ben elérhető.
-XX:+PrintGCTimeStamps
Kinyomtatja azokat az időpontokat, amikor a GC-k az alkalmazás indításához képest megtörténnek. Csak a J2SE1.4.0-tól érhető el.
-XX:+PrintGCDetails
Részleteket ad a GC-kről, például:
- A fiatal és az öreg generáció mérete a GC-k előtt és után
A teljes heap mérete A GC megtörténtének ideje a fiatal és az öreg generációban A minden GC-nél előléptetett objektumok mérete
Kizárólag a JVM1-től elérhető.4.0.
A GC-portál használata az alkalmazás modellezéséhez és teljesítményhangolásához
A GC-portál használható az alkalmazás GC-viselkedésének jobb megértéséhez, hogy a teljesítményt úgy hangolja és méretezze az alkalmazásokat, hogy azok optimálisan fussanak sovány, csúcs- és tömény körülmények között. Támogatja a J2SE1.2.2, J2SE1.3, J2SE1.4 és J2SE1.4.1-től kezdve, beleértve a két új szemétgyűjtési implementációt, a Parallel Collector-t és a Concurrent Collector-t is. Lehetővé teszi a fejlesztők számára a GC naplófájlok beküldését és az alkalmazás viselkedésének elemzését e naplófájlok alapján. Figyelembe vesz néhány alkalmazás- és környezet-specifikus információt is, többek között:
-
Tranzakciós ráta vagy szerverterhelés
Ez tipikus kliens-kiszolgáló konfigurációban működő szerveroldali alkalmazásokra vonatkozik. Az ilyen alkalmazások esetében ez az a sebesség, amellyel az ügyfél állandó terhelést generálhat a kiszolgáló számára, és hasznos a kiszolgáló állandósult állapotának elemzéséhez. Az állandósult állapotelemzés több forgatókönyvet is tartalmazhat, mint például a legrosszabb eset/csúcs/kitörési helyzet vagy egy átlagos helyzet. Ez az információ nem kötelező. Ha nem áll rendelkezésre vagy nem alkalmazható, figyelmen kívül hagyható. Ilyen esetben a Portál által bemutatott információk egy részét is figyelmen kívül kell hagyni, amelyek a következők:
- elméleti áteresztőképesség
- rövid távú adatok
- hosszú távú adatok
-
Az alkalmazás által használt JVM verzió (1.2.2_xx, 1.3.x, 1.4.0, 1.4.1)
Mivel a
verbose:gc
naplóformátum nem szabványos, és a JVM részéről változások történtek, erre az információra a GC Portalnak van szüksége.
processzorok száma a célgépen
Ezeket az információkat a Portál bizonyos számításokhoz használja, például a Concurrent GC overheadhez.
GC Portal Design
A GC Portal négy motorból áll:
- Analyzer and reporting engine
- Graphical engine
- Intelligence engine
- Session and storage engine
VisualGC
Analyzer and Reporting Engine
- Betölti
verbose:gc
a naplófájlokat, bányássza azokat és jelentést készít:- GC szünetek a fiatal és az öreg generációban
- GC gyakorisága a fiatal és az öreg generációban
- Objektek kiosztásának sebessége
- Objektek előléptetésének sebessége. a fiatal generációból az öreg generációba
- Total GC time
- Total Application time
- Initial and Final heap sizes of young and old generations
GC sequential overhead
- GC concurrent overhead
- Rövid távú adatok tranzakciónként
- Hosszú távú adatok tranzakciónként
Az elméleti maximális áteresztőképesség
Ez az információ figyelmen kívül hagyható a nem tranzakcióalapú alkalmazások esetében, de fontos az ügyféloldali alkalmazásoknál vagy azoknál, amelyek rendkívül szakaszos viselkedést mutathatnak.
- A felhasználó megtekintheti a GC-adatokat, a teljes futás során kiválasztott időközönként mintavételezve.
Ez a teljes futás során kiválasztott időközönként mintavételezett részletes GC-információ rendkívül hasznos, ha az alkalmazások idővel változó viselkedést mutatnak, például a szakaszos, ciklikus vagy véletlenszerűen reaktív alkalmazások, és az átlagos összefoglaló információ ennek következtében torz lehet. Ez a részletes és mintavételezett információ felhasználható az alkalmazás és a JVM viselkedésének időbeli változásához.
- Memória a GC előtt
- Memória a GC után
- Memória felszabadítva minden GC-nél
Az objektumok öregedési információi a fiatal generációban
- Elérhető, ha a
-XX:+PrintTenuringDistribution
kapcsolót használják a naplók létrehozására.
Az 1. ábra egy pillanatkép a GC portál elemzőmotorja által bemutatott példajelentésről.
1. ábra. Pillanatkép a GC Portal elemzőmotorjáról
Grafikus motor
A legtöbb, az elemzőmotor által táblázatos formában megjelenített információ grafikusan is ábrázolható. Az összehasonlítások megkönnyítése érdekében több grafikon is ábrázolható ugyanazon a grafikonon.
- A részletes idővonalas GC-elemzés grafikus megjelenítése
- A memória újrahasznosítási információk grafikus megjelenítése minden GC-nél
- A különböző naplófájlokból származó GC-információk grafikus összehasonlítása
Az objektumok életkorára vonatkozó információk grafikus megjelenítése minden “életkor”
2. ábra. Pillanatkép a GC portál grafikus motorjáról
Intelligence Engine
Az Intelligence Engine a következőkből áll:
-
Általános ajánlások
Ez a szakasz a GC teljesítményének hangolására vonatkozó általános információkat és ajánlásokat tartalmazó dokumentumokat tartalmazza. A portál nem nyújt dinamikus ajánlásokat vagy automatikus tuningot. Az Ajánlások általános információkat tartalmaznak a következőkről:
- A GC szünet és gyakoriság csökkentése
- A fiatal és régi generációs halmok méretezése egy adott terhelés kezeléséhez
- A különböző JVM opciók és kapcsolók kiválasztása.
A GC szekvenciális többletköltségének csökkentése
Memóriaszivárgások felderítése Kollektorok kiválasztása
Az alkalmazás futásának rangsorolása több verbose:gc
naplóból elemzett adatok alapján. A felhasználó a következő választási lehetőségek alapján választhatja ki a modellezésre szánt fájlokat (az összes betöltött közül):
- Tranzakciós ráta
- Processzorok száma
- Méret a fiatal generációból
Méret a régi generációból
A felhasználó a következő kritériumok alapján rangsorolhatja az optimális JVM környezetet:
- GC szünetek
GC szekvenciális overhead GC frekvencia CPU hatékonyság
A felhasználó megtekintheti a különböző futtatások grafikus összehasonlítását is.
3. ábra. Pillanatkép a GC-portál intelligenciamotorjáról
Projekciók a méretezéshez és a tuninghoz “mi van, ha” forgatókönyveken keresztül
Hogyan változhat a GC viselkedése a fiatal generáció méretének változásával. Ez a funkció jelenleg korlátozott, és csak a J2SE1.4.1-től kezdve működik a Concurrent Collector használatával. A kivetítés kimenete mutatja a lehetséges változásokat:
- GC pause
- Size of long-live data
GC frequency GC sequential load CPU utilization (%) Speedup Allocation rate Promotion rate Size of Short-lived data
Case Studies
Néhány valós esettanulmány a GC szempontjából történő hangolásról.
Mutatók néhány fehér könyvre, amelyek mélyreható részleteket tartalmaznak a GC-tuningról.
Session and Storage Engine
- A felhasználói munkamenetek kezelése
A felhasználói profilok kezelése és tárolása A felhasználói adatok/naplók biztonságos kezelése és tárolása A felhasználói/adatnaplók elérhetővé tétele referencia megtekintéséhez és empirikus modellezéshez
4. ábra. Pillanatkép a GC portál tároló motorjáról
VisualGC
A visualgc eszköz egy instrumentált HotSpot JVM-hez csatlakozik, és összegyűjti és grafikusan megjeleníti a szemétgyűjtés, az osztálybetöltő és a HotSpot fordító teljesítményadatait. A GC portálba van beépítve a GC-vel kapcsolatos információk gyűjtésére a JVM futási idején. A GC Portal a webstart eszközt használja a vizuálisGC információk futtatására és böngészőben történő megjelenítésére. További részletek erről az eszközről a CoolStuff – jvmstat oldalon találhatók. A VisualGC GC Portalból történő futtatásához szükséges ReadMe fájl a GC Portal szoftverbe van beépítve.
Köszönet:
A szerző szeretne köszönetet mondani Mayank Srivastavának, Nagendra Nagarajayyának, Nandula Narasimhamnak és S.R.Venkatramanannak a GC Portalhoz való hozzájárulásukért. A szerző ezúton is szeretne köszönetet mondani a Sun JVM szemétgyűjtési architektúrájának és szakértőinek: John Coomes, David Detlefs, Steve Heller, Peter Kessler, Ross Knippel, Jon Masamitsu, James Mcilree és Y.S. Ramakrishna a munkához nyújtott segítségükért és útmutatásukért. A szerző ezúton is szeretne köszönetet mondani a Sun JVM teljesítményért felelős csapatának tagjainak, Timothy Cramernek és Brian Doherty-nek (a VisualGC és a jvmstat eszközök szerzőjének) a VisualGC GC Portalba való integrálásában nyújtott segítségükért.
A szerzőről:
Alka Gupta a Sun Microsystems műszaki munkatársa. Felelős a Sun ISV-ivel és partnereivel való együttműködésért, hogy segítse őket a Sun újonnan megjelenő technológiáinak és platformjainak gyors és hatékony átvételében. Közel 7 éve dolgozik a Sun platformok teljesítményhangolásának területén, és közel 10 éve van jelen ebben az iparágban. Alka az indiai Indiai Technológiai Intézetben (IIT) szerzett diplomát.
Leave a Reply