Tekninen artikkeli

Tämä artikkeli on päivitetty sisältämään GC Portal -ohjelmiston Linuxille ja Java Desktop Systemille (JDS), joka on saatavilla sekä Sun Java System Application Server 7- (aiemmin Sun ONE Application Server 7 (S1AS7)) että Tomcat-palvelimille. Alun perin se oli saatavilla vain Solarikselle ja Windowsille. Tämä GC Portal -ohjelmiston versio sisältää myös GC Portaliin integroidun VisualGC:n.

GC Portal mahdollistaa Java-sovellusten analysoinnin ja suorituskyvyn virittämisen roskienkeräyksen (GC) näkökulmasta louhimalla JVM:n tuottamia verbose:gc lokitietoja. GC Portal on keskitetty sivu GC-ongelmiin, ja se sisältää laajan kokoelman whitepapereita, tapaustutkimuksia ja muuta materiaalia. Portal on tarkoitettu käytettäväksi Sun Microsystemsin HotSpot JVM:n kanssa, jota jaetaan osana Java 2, Standard Editionia (J2SE). GC Portal -portaalin avulla kehittäjät voivat mallintaa sovelluksen ja JVM:n käyttäytymistä GC-näkökulmasta. Tässä artikkelissa esitellään GC Portal -portaalin rakenne ja ominaisuudet, jotta kehittäjät voivat käyttää sitä työkaluna GC:n analysointiin ja virittämiseen.

GC Portal -portaali edellyttää, että JVM käyttää seuraavia kytkimiä, jotta se voi tuottaa verbose:gc lokitietoja, joita portaali käsittelee analysointia varten.

 -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 

Muiden JVM-kytkimien käyttöä ei vaadita GC Portalille sopivien lokien tuottamiseen, mutta niitä voidaan lisätä, jos se katsotaan tarpeelliseksi JVM:n ja sovelluksen virittämisen ja mitoituksen kannalta. Huomautus: -XX-kytkimet eivät ole vakiomuotoisia, ja niitä voidaan myös muuttaa ilman ennakkoilmoitusta tulevissa JVM-julkaisuissa.

Sovellusten mallintaminen ja suorituskyvyn virittäminen GC-näkökulmasta

Javasovellusten mallintamisen avulla kehittäjät voivat poistaa roskienkeräyksen taukojen tiheyteen ja kestoon liittyvän ennakoimattomuuden. Nämä tauot liittyvät suoraan:

  • Luotujen ja elävien objektien määrä ja kokonaiskoko
  • Objektien keskimääräinen elinikä
  • JVM:n kasan koko

Kehittäjät voivat rakentaa GC-portaalin tarjoaman analyysin perusteella tietylle joukolle portaaliin syötettyjä verbose:gc lokitiedostoja mallin, joka auttaa heitä ymmärtämään sovelluksen ja JVM:n käyttäytymistä paremmin.

verbose:gc-lokit sisältävät arvokasta tietoa seuraavista asioista:

  • GC-taukoajat
  • GC:n taajuus
  • Sovelluksen suoritusajat
  • Luotujen ja tuhottujen objektien koko
  • Objektien luomisen nopeus Kullakin GC:llä uudelleenkierrätetyn muistin määrä

Sovelluksen käyttäytymistä voidaan kaaviokuvioida ja analysoida, jotta voidaan määritellä erilaiset taukojen keston väliset suhteet, taukojen tiheyden, objektien luomisnopeuden ja vapautetun muistin välillä. Näiden tietojen analysoinnin avulla kehittäjät voivat virittää sovelluksen suorituskykyä optimoimalla GC-taajuutta ja keräysaikoja määrittelemällä parhaita kasakokoja, muita JVM-optioita ja vaihtoehtoisia GC-algoritmeja tiettyyn tilanteeseen.

Tietoja, jotka on johdettu verbose:gc-lokeista GC-käyttäytymisen analysointia ja mallintamista varten

Tämmöisiä tietoja voidaan käyttää roskienkeruuprosessin suorituskyvyn virittämiseen.

Keskimääräiset GC-tauot nuoressa ja vanhassa sukupolvessa

Keskimääräinen aika, jonka sovellus on keskeytettynä, kun roskienkeräys suoritetaan JVM:ssä.

Keskimääräinen GC-taajuus nuoressa ja vanhassa sukupolvessa

Periodisuus, jolla roskienkerääjä suoritetaan nuoressa ja vanhassa sukupolvessa. Tämä voidaan saada, koska jokaisen GC-aktiviteetin aikainstanssi kirjataan lokiin.

GC sequential overhead

Prosenttiosuus järjestelmäajasta, jonka ajan sovellus on keskeytettynä roskienkeräyksen suorittamista varten. Lasketaan muodossa Avg. GC-tauko * Avg. GC frequency * 100 %

GC concurrent overhead

Prosenttiosuus järjestelmäajasta, jonka ajan roskienkeruu tapahtuu samanaikaisesti sovelluksen kanssa. Lasketaan seuraavasti: Avg. samanaikainen GC-aika (pyyhkäisyvaihe) * Avg. samanaikainen GC-taajuus / suorittimien lukumäärä

Kunkin GC:n kierrättämä muisti nuoressa ja vanhassa sukupolvessa

Kunkin GC:n aikana kerätyn roskapostin kokonaismäärä

Allokointinopeus

Nopeus, jolla sovellus allokoi dataa nuoren sukupolven aikana. Jos nuoren sukupolven kasan occupancy_at_start_of_current_gc=x, occupancy_at_end_of_previous_gc = y ja GC-taajuus on 1 sekunnissa, allokointinopeus on noin x-y sekunnissa.

Promootionopeus

Nopeus, jolla dataa promotoidaan vanhaan sukupolveen.

Sovelluksen allokoiman datan määrä yhteensä

Tämä on datan määrä, jonka sovellus allokoi transaktiota kohden.

Kokonaisdata voidaan jakaa lyhytaikaiseen dataan ja pitkäaikaiseen dataan

Pitkäaikaista dataa on se, mikä selviää nuoren sukupolven GC-sykleistä ja ylennetään vanhaan sukupolveen.

Lyhytaikaista dataa

Lyhytikäistä dataa, joka kuolee hyvin nopeasti ja joka kerätään nuoren sukupolven aikana. Tämä voidaan laskea seuraavasti: Kokonaisdata – Pitkäaikainen data.

Aktiivinen kokonaisdata

Tämä on koko data, joka on elossa minä tahansa ajankohtana. Tämä on kriittinen tekijä, kun rakennetaan malli JVM:n kasan mitoitusta varten. Esimerkiksi, kun kuormitus on 100 transaktiota sekunnissa ja pitkäaikainen data on 50K per transaktio, joka kestää vähintään 40 sekuntia, vanhan sukupolven vähimmäismuistijalanjälki olisi

50K*40s*100 = 200M

Muistivuodot

Nämä voidaan havaita ja ”muistin loppu” -virheitä voidaan ymmärtää paremmin tarkkailemalla jokaisella pyyhkäisyllä kerättyä roskapaljoutta, kuten näissä lokitiedostoissa näkyy.

Flags and Switches for Generating GC Logs

On olemassa paljon hyödyllistä GC:hen liittyvää tietoa, jonka JVM voi lokata tiedostoon. GC-portaali käyttää näitä tietoja sovellusten ja JVM:n virittämiseen ja mitoittamiseen GC:n näkökulmasta. Yksityiskohtaista GC-tietoa sisältävät lokit luodaan, kun Java-sovellus ajetaan seuraavilla kytkimillä:

verbose:gc Tämä lippu kytkee GC-tiedon kirjaamisen päälle. Käytettävissä kaikissa JVM:issä.

-XX:+PrintGCTimeStamps Tulostaa GC:n tapahtuma-ajat suhteessa sovelluksen käynnistykseen. Käytettävissä vain J2SE1.4.0:sta alkaen.

-XX:+PrintGCDetails Antaa yksityiskohtia GC:istä, kuten:

  • Koko nuoren ja vanhan sukupolven koko ennen ja jälkeen GC:ien
  • Kokonaiskasan koko
  • Aika, joka kuluu GC:n tapahtumiseen nuoressa ja vanhassa sukupolvessa Objektien koko, joka on ylennetty jokaisella GC:llä

Saatavilla vain JVM1:stä.4.0.

GC-portaalin käyttäminen sovellusten mallintamiseen ja suorituskyvyn virittämiseen

GC-portaalia voidaan käyttää sovelluksen GC-käyttäytymisen parempaan ymmärtämiseen suorituskyvyn virittämiseksi ja sovellusten koon määrittämiseksi siten, että ne toimivat optimaalisesti laihassa, ruuhkahuippu- ja burst-olosuhteissa. Se tukee J2SE1.2.2:sta, J2SE1.3:sta, J2SE1.4:stä ja J2SE1.4.1:stä eteenpäin, mukaan lukien kaksi uutta roskienkeruutoteutusta, Parallel Collector ja Concurrent Collector. Sen avulla kehittäjät voivat lähettää GC-lokitiedostoja ja analysoida sovelluksen käyttäytymistä näiden lokitiedostojen perusteella. Se ottaa huomioon myös joitakin sovellus- ja ympäristökohtaisia tietoja, kuten:

  • Transaktionopeus tai palvelinkuorma

    Tämä koskee tyypillisiä palvelinpuolen sovelluksia, jotka toimivat asiakas-palvelinkokoonpanossa. Tällaisissa sovelluksissa tämä on nopeus, jolla asiakas saattaa tuottaa palvelimelle tasaista kuormaa, jota palvelin voi käsitellä, ja se on hyödyllinen palvelimen tasaista tilaa koskevassa analyysissä. Tasaisen tilan analyysi voi sisältää useita skenaarioita, kuten pahimman tapauksen/huipputilanteen/ruuhkatilanteen tai keskimääräisen tilanteen. Nämä tiedot eivät ole pakollisia. Jos sitä ei ole saatavilla tai se ei ole sovellettavissa, se voidaan jättää huomiotta. Tällaisessa tapauksessa myös osa portaalin esittämistä tiedoista olisi jätettävä huomiotta, kuten:

    • Teoreettinen läpimenoteho
    • Lyhytaikaiset tiedot
    • Lyhytaikaiset tiedot
    • Lyhytaikaiset tiedot
  • Ohjelmakoneen prosessoreiden määrä

    Näitä tietoja käytetään portaalissa tiettyihin laskutoimituksiin, kuten samanaikaisen GC:n päällekkäislaskennan yleiskustannuksiin.

  • Sovelluksen käyttämä JVM-versio (1.2.2_xx, 1.3.x, 1.4.0, 1.4.1)

    Koska verbose:gc-lokin muoto ei ole vakio ja JVM:stä on tullut muutoksia, GC Portal tarvitsee nämä tiedot.

GC Portal Design

GC Portal koostuu neljästä moottorista:

  • Analyzer and reporting engine
  • Graphical engine
  • Intelligence engine
  • Session and storage engine
  • VisualGC

Analyzer and Reporting Engine

  • Lataa verbose:gc lokitiedostot, louhii ne ja raportoi:
    • GC:n tauot nuoressa ja vanhassa sukupolvessa
    • GC:n taajuus nuoressa ja vanhassa sukupolvessa
    • Objektien jakamisnopeus
    • Objektien edistämisnopeus. nuoresta sukupolvesta vanhaan sukupolveen
    • Kokonais GC-aika
    • Kokonaiskäyttöaika
    • Nuorten ja vanhojen sukupolvien alkuperäisen ja lopullisen kasan koot
    • GC sekventiaalinen overhead
    • GC concurrent overhead
  • Laskee ja esittää sovellukseen liittyviä tietoja
    • Lyhytaikaista dataa transaktiota kohti
    • Pitkäaikaista dataa transaktiota kohti
    • Teoreettinen maksimiläpimenoaika

  • CPU-hyötysuhteen tehokkuus

Nämä tiedot voidaan jättää huomioimatta sovellusten kohdalla, jotka eivät perustu transaktioperusteisiin, mutta sillä on merkitystä asiakaspuolen sovelluksille tai sovelluksille, jotka saattavat käyttäytyä erittäin vaiheittain.

  • Esittää sovelluksen ja JVM:n yksityiskohtaisen GC-käyttäytymisen ajan mittaan
    • Käyttäjä voi tarkastella GC-tietoja, jotka on poimittu näytteeksi valituin aikavälein koko ajon ajalta.

    Tämä yksityiskohtainen GC-tieto, joka on poimittu näytteeksi valituin aikavälein koko ajon ajalta, on erittäin hyödyllistä silloin, kun sovellukset käyttäytyvät ajan mittaan vaihtelevasti, kuten vaiheistetut, sykliset tai satunnaisesti reagoivat sovellukset, jolloin keskimääräiset yhteenvetotiedot saattavat olla vääristyneitä. Näiden yksityiskohtaisten ja otantaan perustuvien tietojen avulla voidaan tarkastella sovelluksen ja JVM:n käyttäytymistä sen muuttuessa ajan mittaan.

  • Yksityiskohtaiset muistin kierrätystiedot ajan mittaan nuorissa ja vanhoissa sukupolvissa
    • Muisti ennen GC:tä
    • Muisti GC:n jälkeen
    • Vapautettu muisti jokaisessa GC:ssä
  • Nuoressa sukupolvessa olevien objektien ikääntymistieto

    • Käytettävissä, jos lokien tuottamiseen käytetään kytkintä -XX:+PrintTenuringDistribution.

    Kuvassa 1 on tilannekuva GC-portaalin Analyzer-moottorin esittämästä esimerkkiraportista.

    Kuva 1. GC-portaalin Analyzer-moottorin esittämä raportti. Snapshot of the Analysis Engine from the GC Portal

    Graphical Engine

    Monet tiedot, jotka Analyzer-moottori esittää taulukkomuodossa, voidaan piirtää graafisesti. Samaan kuvaajaan voidaan piirtää useita kaavioita vertailun helpottamiseksi.

    • Yksityiskohtaisen aikajanan GC-analyysin graafinen esitys
    • Muistin kierrätystietojen graafinen esitys jokaisessa GC:ssä
    • Eri lokitiedostoista saatujen GC-tietojen graafinen vertailu
    • Objektien iän kestoaikakausitietojen graafinen esitys jokaisessa ”iässä”

    Kuvio2. Tilannekuva GC-portaalin graafisesta moottorista

    Intelligenssimoottori

    Intelligenssimoottori koostuu seuraavista osista:

    • Yleisiä suosituksia

      Tässä osiossa on asiakirjoja, jotka kattavat GC:n suorituskyvyn virittämiseen liittyviä yleisiä tietoja ja suosituksia. Portaali ei tarjoa dynaamisia suosituksia tai automaattista viritystä. Suositukset sisältävät yleistä tietoa siitä, miten:

      • Vähentää GC:n taukoa ja taajuutta
      • Vähentää GC:n sekventiaalista ylikuormitusta
      • Kokoa nuoren ja vanhan sukupolven kasat niin, että ne pystyvät käsittelemään tiettyä kuormaa
      • Havaita muistivuodot
      • Valitse kollektorit
      • Valitse JVM:n eri optiot ja kytkimet.
    • Empiirinen mallinnus

      Aseta sovelluksen suoritukset paremmuusjärjestykseen useista verbose:gc lokitiedoista analysoitujen tietojen perusteella. Käyttäjä voi valita mallinnettavia tiedostoja (kaikkien ladattujen joukosta) seuraavien valintojen perusteella:

      • Transaktionopeus
      • Prosessoreiden määrä
      • Nuorten sukupolvien koko
      • Vanhan sukupolven koko

    • JDK-versio
    • Kuoppien koot

    Käyttäjä voi sijoittaa optimaalisen JVM-ohjelman ympäristön paremmuusjärjestykseen seuraavilla perusteilla:

    • GC-tauot
    • GC:n sekventiaalinen yleiskustannus
    • GC-taajuus
    • CPU-tehokkuus

    Käyttäjä voi myös tarkastella eri ajojen graafista vertailua.

    Kuvio 3. JVM-ajot. Tilannekuva GC-portaalin älykkyysmoottorista

  • Projektioita mitoitusta ja viritystä varten ”mitä jos”-skenaarioiden avulla

    Miten GC:n käyttäytyminen saattaa muuttua nuoren sukupolven koon muuttuessa. Tämä toiminto on tällä hetkellä rajoitettu ja toimii vain J2SE1.4.1:stä alkaen Concurrent Collectorilla. Projektiotulos näyttää mahdolliset muutokset seuraavissa:

    • GC-tauko
    • GC-taajuus
    • GC:n sekventiaalinen kuormitus
    • CPU:n käyttö (%)

  • Nopeus Allokointinopeus Promootionopeus Lyhyiden sukupolvien koko Kokolived data

  • Size of long-lived data
  • Case Studies

    Joitakin reaalimaailman tapaustutkimuksia siitä, miten virittää GC:n näkökulmasta.

  • Valkoiset paperit

    Osoittimet joihinkin valkoisiin papereihin, joissa on syvällisiä yksityiskohtia GC:n virittämisestä.

  • Session and Storage Engine

    • Hallitse käyttäjäistuntoja
    • Hallitse ja tallenna käyttäjäprofiileja
    • Hallitse ja tallenna käyttäjätietoja/lokeja tietoturvallisesti
    • Valmistele käyttäjä-/datalokit referenssikatselua ja empiiristä mallintamista varten

    Kuva 4. Snapshot GC-portaalin tallennusmoottorista

    VisualGC

    Visualgc-työkalu kiinnittyy instrumentoituun HotSpot JVM:ään ja kerää ja näyttää graafisesti roskienkeräys-, luokkienlataus- ja HotSpot-kääntäjän suorituskykytiedot. Se on sisällytetty GC-portaaliin GC:hen liittyvien tietojen keräämistä varten JVM:n ajonaikana. GC Portal käyttää webstart-työkalua visualGC-tietojen ajamiseen ja näyttämiseen selaimessa. Lisätietoja tästä työkalusta on saatavilla CoolStuff – jvmstat -sivulla. ReadMe-tiedosto VisualGC:n ajamiseen GC Portalista on sisäänrakennettu GC Portal -ohjelmistoon.

    Kiitokset:

    Tekijä haluaa kiittää Mayank Srivastavaa, Nagendra Nagarajayyaa, Nandula Narasimhamia ja S.R.Venkatramanania heidän panoksestaan GC Portaliin. Kirjoittaja haluaa myös kiittää Sun JVM:n roskienkeräysarkkitehteja ja -asiantuntijoita John Coomesia, David Detlefsiä, Steve Helleriä, Peter Kessleriä, Ross Knippeliä, Jon Masamitsua, James Milreea ja Y.S. Ramakrishnaa heidän avustaan ja ohjauksestaan tässä työssä. Kirjoittaja haluaa myös kiittää Sunin JVM-suorituskykytiimin jäseniä Timothy Crameria ja Brian Dohertyä (VisualGC- ja jvmstat-työkalujen kirjoittajia) avusta VisualGC:n integroimisessa GC Portaliin.

    Tekijästä:

    Alka Gupta on Sun Microsystemsin teknisen henkilökunnan jäsen. Hänen vastuullaan on tehdä yhteistyötä Sunin ISV:iden ja kumppaneiden kanssa auttaakseen heitä omaksumaan Sunin uudet teknologiat ja alustat nopeasti ja tehokkaasti. Hän on työskennellyt Sun-alustojen suorituskyvyn virittämisen parissa lähes 7 vuotta, ja hän on ollut alalla lähes 10 vuotta. Alka on valmistunut Intian teknillisestä instituutista (IIT), Intia.

    Leave a Reply