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
  • 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.

  • 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.

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
  • Kiszámítja és bemutatja az alkalmazással kapcsolatos információkat
    • Rövid távú adatok tranzakciónként
    • Hosszú távú adatok tranzakciónként
    • Az elméleti maximális áteresztőképesség

  • CPU-hatékonysá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.

  • Bemutatja az alkalmazás és a JVM részletes GC-vel kapcsolatos viselkedését az idő múlásával
    • 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.

  • Részletes memória újrahasznosítási információk az idő múlásával a fiatal és az öreg generációban
    • 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 GC szekvenciális többletköltségének csökkentése

    • A fiatal és régi generációs halmok méretezése egy adott terhelés kezeléséhez
    • Memóriaszivárgások felderítése Kollektorok kiválasztása

    • A különböző JVM opciók és kapcsolók kiválasztása.
  • Empirikus modellezés

    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

  • JDK verzió
  • Heap méretek
  • 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
    • GC frequency GC sequential load CPU utilization (%) Speedup Allocation rate Promotion rate Size of Short-lived data

    • Size of long-live data
  • Case Studies

    Néhány valós esettanulmány a GC szempontjából történő hangolásról.

  • Fehér könyvek

    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