Ohjelmointi

Kasan pudotus ja analyysi VisualVM: llä

Aikaisemmissa blogiviesteissä olen käsitellyt VisualVM: n käyttöä HotSpot JVM: n ajonaikaisen tiedon hankkimiseen samalla tavalla kuin jinfo ja miten VisualVM: ää käytetään yhdessä JMX: n ja MBeansin kanssa samalla tavalla kuin JConsole. Tässä blogikirjoituksessa tarkastellaan, kuinka VisualVM: ää voidaan käyttää luomaan ja analysoimaan kasan kaatopaikka samalla tavalla kuin komentorivityökaluilla jmap ja jhat.

Jmap (Java Memory Map) -työkalu on yksi monista tavoista, joilla Java-kasan kaatopaikka voidaan luoda. Java Heap Analysis Tool (jhat) TechNotes / man -sivulla luetellaan neljä tapaa luoda kasan kaatopaikka, joka voidaan analysoida jhatilla. Neljä lueteltua menetelmää kasan kaatopaikan luomiseksi ovat jmap, JConsole (Java Monitoring and Management Console), HPROF ja kun OutOfMemoryError tapahtuu, kun -XX: + HeapDumpOnOutOfMemoryError VM-vaihtoehto on määritetty. Viides lähestymistapa, jota ei ole luettelossa, mutta jota on helppo käyttää, on Java VisualVM. (Muuten, toinen menetelmä on MXBeanin käyttö nimeltä HotSpotDiagnosticMXBean ja sen dumpHeap (String, Boolean) -menetelmä.)

jmap työkalua on helppo käyttää komentoriviltä kasan dumpin tuottamiseksi. Sitä voidaan käyttää käynnissä olevaa Java-prosessia vastaan, jonka piocess-tunnus (pid) tunnetaan (saatavana jps: n kautta), tai ydintiedostoa vastaan. Tässä viestissä keskityn käyttämään jmap käynnissä olevan prosessin tunnuksella.

Jmap-sivu kertoo sen jmap on kokeellinen työkalu, jolla on suhteellisen rajoitetut Windows-ominaisuudet, mikä ei välttämättä ole käytettävissä JDK: n tulevissa versioissa. Tällä sivulla on myös luettelo käytettävissä olevista vaihtoehdoista miten jmap pitäisi luoda kasan kaatopaikka.

Seuraava näytön tilannekuva näyttää miten jmap voidaan käyttää kasan kaatamiseen.

Luotu dump-tiedosto, dustin.bin on tässä tapauksessa binaarinen, kuten seuraavassa näytön tilannekuvassa näkyy.

Binaarinen kasan kaatopaikka voidaan lukea jhat työkalu. Sunin Java SE 6 sisälsi version jhat korvaa HAT: n, joka oli aiemmin saatavana erillisenä latauksena. Juoksu on melkein triviaalia jhat. Tarvitsee vain vedota jhat kanssa luodulla kasan dump-tiedostolla jmap (tai vaihtoehtoinen dumpinmuodostustekniikka) seuraavan näytön tilannekuvan mukaisesti.

Kun kasan kaatopaikka on luotu (jmap) ja jhat työkalun avulla, kaatopaikka voidaan analysoida verkkoselaimella. Konsolin lähtö kertoo meille, että dump on käytettävissä portissa 7000 (tämä oletusportti voidaan ohittaa -portti vaihtoehto). Kun suoritan selaimen samalla koneella, jolla juoksin jhat, Osaan käyttää paikallinen isäntä URL-osoitteen isäntäosalle. Aloitussivu, joka käyttää localhostia ja porttia 7000, näkyy seuraavassa näytön tilannekuvassa.

OQL (Laval Object Query Language) -lausekkeet voidaan kirjoittaa etsimään tarvittavat tiedot kasan dumpista. jhat-aloitettu verkkopalvelin sisältää OQL-ohjeet URL-osoitteessa // localhost: 7000 / oqlhelp /. Katso myös Java-kasan kysely OQL: llä saadaksesi lisätietoja OQL: n käytöstä. Usein voi kuitenkin löytää tarvitsemansa yksinkertaisesti käyttämällä jo annettua tietoa ja siirtymällä tietojen välillä käyttämällä annettuja hyperlinkkejä.

Seuraava näytön tilannekuva osoittaa yhden hyödyllisimmistä sivuista jhatkasan dumpin web-palvelinpohjainen ulostulo. Tämä sivu näyttää erilaisten Java-objektien, mukaan lukien alustan, esiintymien määrän.

Merkittävä apu ymmärtämisessä, mitä nämä verkkosivut tuottavat jhat mean on luokkatiedostomuodon VM-määritys. Tämän asiakirjan kohdassa 4.3.2 ("Kenttäkuvaajat") on taulukko, joka näyttää kenttäkuvausmerkkien yhdistämisen käyttämäämme tietotyyppiin. Tämän taulukon mukaan "B" osoittaa a tavu, "C" tarkoittaa a hiiltyä, "D" tarkoittaa a kaksinkertainen, "F" osoittaa a kellua, "I" tarkoittaa kokonaisluku, "J" tarkoittaa a pitkä, "L" tarkoittaa viittausta (luokan esiintymä), "Z" tarkoittaa a looginenja [ ilmaisee taulukon.

Toistaiseksi olen tarkastellut käyttöä jmap ja jhat komentoriviltä kasanluonnin luomiseksi ja web-selainpohjaisen menetelmän luomisen luoman kasanlaskun analysoimiseksi. Vaikka näitä työkaluja on suhteellisen helppo käyttää, VisualVM tarjoaa samanlaisia ​​toimintoja entistäkin helpommin.

Yksi tapa luoda kasan kaatopaikka Visual VM: ssä on yksinkertaisesti napsauttaa hiiren kakkospainikkeella haluamaasi prosessia ja valita "Kasan kaatopaikka". Tämä menetelmä näkyy seuraavassa näytön tilannekuvassa.

Tämä luo kasan dumpin, kuten sen nimi osoittaa Java-prosessin alla.

Toinen tapa luoda kasan kaatopaikka VisualVM: llä on napsauttaa kiinnostavaa Java-prosessia niin, että VisualVM: ssä tulee esiin asiaankuuluvat välilehdet ("Yleiskatsaus", "Monitori", "Säikeet" ja "Profiler"). "Monitori" -välilehden valitseminen antaa "Heap Dump" -painikkeen seuraavan näytön tilannekuvan mukaisesti.

Napsauttamalla "Kasan kaatopaikka" -painiketta, kasan kaatopaikka syntyy aivan kuten yllä kuvatulla oikealla napsautuksella. Tämä näkyy seuraavassa näytön tilannekuvassa, joka tällöin näyttää analysoidun kasan dumpin "Yhteenveto" -välilehden.

Kasan dump-analyysin "Yhteenveto" -välilehden lisäksi "Class" -välilehdessä on muita mielenkiintoisia yksityiskohtia kasan dumpista. Tämä välilehti sisältää vaakapalkkikaavioita, jotka osoittavat graafisesti kuhunkin luokkaan liittyvien esiintymien prosenttiosuuden. Esimerkki näkyy seuraavassa näytön tilannekuvassa.

Näytetyt luokat on täsmennetty eikä käytetä symboleja, kuten edellä on kuvattu jhat-pohjainen kasan kaatopaikka-analyysi. Voit napsauttaa hiiren kakkospainikkeella mitä tahansa luokkaa "Luokat" -välilehdessä ja valita "Näytä instanssinäkymässä" nähdäksesi tiedot valitun luokan jokaisesta yksittäisestä esiintymästä. Tämä näkyy seuraavassa näytön tilannekuvassa.

Johtopäätös

VisualVM tarjoaa useita etuja, kun luodaan ja analysoidaan kasan kaatopaikkoja. Ensinnäkin kaikki luomisesta analyysiin on yhdessä paikassa. Toiseksi tiedot toimitetaan muodossa, jota voidaan pitää esitettävämmässä muodossa graafisella tuella. Lopuksi, VisualVM: ssä voidaan käyttää myös muita työkaluja kasan dump-analyysin yhteydessä. VisualVM tarjoaa yhden luukun moniin Java-kehittäjien kehitys-, virheenkorjaus- ja suorituskykyanalyysitarpeisiin.

Lisäviitteet

⇒ Java SE: n vianmääritys

⇒ Vianmääritysopas Java SE 6: lle, jossa on HotSpot JVM (PDF)

⇒ Java SE 6 Performance White -kirja

⇒ Mitä Java-kasassani on?

⇒ Java Heapsin analysointi jmapilla ja jhatilla

⇒ Java-muistin profilointi jmapilla ja jhatilla

Tämän tarinan "Heap Dump and Analysis with VisualVM" julkaisi alun perin JavaWorld.