Programiranje

Heap Dump in analiza z VisualVM

V prejšnjih objavah v blogu sem obravnaval uporabo VisualVM za pridobivanje informacij o času izvajanja HotSpot JVM na podoben način kot jinfo in kako uporabljati VisualVM v povezavi z JMX in MBeans na podoben način kot JConsole. Ta objava v spletnem dnevniku preučuje, kako je mogoče VisualVM uporabiti za ustvarjanje in analiziranje odlagališča kopice na podoben način kot pri orodjih ukazne vrstice jmap in jhat.

Orodje jmap (Java Memory Map) je eden od več načinov, kako je mogoče ustvariti odlagališče kopice Java. Na strani TechNotes / man man v orodju za analizo kopice Java (jhat) so našteti štirje načini za ustvarjanje odlagališča kopice, ki jih lahko analizira jhat. Štirje našteti načini za ustvarjanje odlagališča kopice so uporaba jmap, JConsole (Java nadzorna in upravljalna konzola), HPROF in ko pride do OutOfMemoryError, ko -XX: + HeapDumpOnOutOfMemoryError Določena je možnost VM. Peti pristop, ki ni naveden, vendar je enostaven za uporabo, je Java VisualVM. (Mimogrede, druga metoda je uporaba funkcije MXBean, imenovane HotSpotDiagnosticMXBean, in metode dumpHeap (String, Boolean).)

The jmap orodje je preprosto uporabiti iz ukazne vrstice za izdelavo odlagališča kopice. Uporablja se lahko proti delujočemu Java procesu, katerega piocess ID (pid) je znan (na voljo prek jps), ali proti osnovni datoteki. V tem prispevku se bom osredotočil na uporabo jmap z ID-jem tekočega procesa.

Na strani jmap je navedeno jmap je eksperimentalno orodje z razmeroma omejenimi zmožnostmi v sistemu Windows, ki morda ne bo na voljo s prihodnjimi različicami JDK. Na tej strani so navedene tudi možnosti, s katerimi lahko določite, kako jmap bi moral ustvariti odlagališče kupa.

Naslednji posnetek zaslona prikazuje, kako jmap se lahko uporablja za odlaganje kupa.

Ustvarjena datoteka izpisa, dustin.bin v tem primeru je binarno, kot je prikazano na naslednjem posnetku zaslona.

Binarni odlagališče kopij je mogoče prebrati z jhat orodje. Sun's Java SE 6 je vključeval izvajanje jhat nadomešča HAT, ki je bil prej na voljo kot ločen prenos. Tek je skoraj nepomembno jhat. Treba je le priklicati jhat na kopiji datoteke kopij, ustvarjene z jmap (ali alternativna tehnika ustvarjanja odlagališč), kot je prikazano na naslednjem posnetku zaslona.

Z ustvarjenim smetiščem kupa (jmap) in jhat orodje, lahko smetišče analiziramo s spletnim brskalnikom. Izhod na konzoli nam pove, da je izpis na voljo na vratih 7000 (ta privzeta vrata je mogoče preglasiti z -port možnost). Ko zaženem brskalnik na isti napravi, na kateri sem zagnal jhat, Lahko uporabim lokalni gostitelj za gostiteljski del URL-ja. Začetna stran, ki uporablja localhost in vrata 7000, je prikazana na naslednjem posnetku zaslona.

Izjave za jezik poljubnega poizvedbnega predmeta (OQL) lahko zapišete, da najdete potrebne podrobnosti na smetišču kopice. The jhatspletni strežnik vključuje pomoč za OQL na URL // localhost: 7000 / oqlhelp /. Za več podrobnosti o uporabi OQL glejte tudi Poizvedba Java Heap z OQL. Pogosto pa lahko najdemo tisto, kar potrebujemo, že z uporabo že danih informacij in premikanjem med informacijami s pomočjo danih hiperpovezav.

Naslednji posnetek zaslona prikazuje eno uporabnejših strani, ki so na voljo po zaslugi jhatizhodni odlagališče kopij na spletnem strežniku. Ta stran prikazuje število primerkov različnih predmetov Java, vključno s predmeti platforme.

Pomembna pomoč pri razumevanju, kaj ustvarjajo te spletne strani jhat pomeni je specifikacija VM za obliko zapisa datoteke razreda. V oddelku 4.3.2 ("Opisniki polj") tega dokumenta je tabela, ki prikazuje preslikavo znakov deskriptorjev polja v podatkovni tip, ki ga uporabljamo. V skladu s to tabelo "B" pomeni a bajt, "C" pomeni a char, "D" pomeni a dvojno, "F" pomeni a plovec, "I" pomeni celo število, "J" pomeni a dolga, "L" pomeni sklic (primerek razreda), "Z" pomeni a logično, in [ označuje matriko.

Do zdaj sem preučeval uporabo jmap in jhat iz ukazne vrstice za generiranje odlagališča kopice in zagotavljanje metode spletnega brskalnika za analizo ustvarjenega odlagališča kopice. Čeprav so ta orodja sorazmerno enostavna za uporabo, VisualVM nudi podobno funkcionalnost v še lažjem pristopu.

Eden od načinov za ustvarjanje odlagališča kopice v Visual VM je, da z desno miškino tipko kliknete želeni postopek in izberete "Heap Dump". Ta metoda je prikazana v naslednjem posnetku zaslona.

S tem se ustvari odlagališče kopice, kot je označeno z imenom pod postopkom Java.

Drugi pristop za ustvarjanje odlagališča kopice z VisualVM je, da kliknete proces Java, ki vas zanima, tako da se v VisualVM prikažejo ustrezni zavihki ("Overview", "Monitor", "Threads" in "Profiler"). Če izberete zavihek "Monitor", dobite gumb "Heap Dump", kot je prikazano na naslednjem posnetku zaslona.

S klikom na gumb "Heap Dump" se ustvari smetišče, tako kot pri zgoraj opisani možnosti z desnim klikom. To je prikazano na naslednjem posnetku zaslona, ​​ki v tem primeru prikaže zavihek "Povzetek" analiziranega odlagališča kopice.

Poleg zavihka "Povzetek" analize odlagališča kopice so na zavihku "Razred" predstavljene še druge zanimive podrobnosti iz odlagališča kupa. Ta zavihek vključuje vodoravne grafikone, ki grafično kažejo odstotek skupnih primerkov, povezanih z vsakim razredom. Primer je prikazan v naslednjem posnetku zaslona.

Prikazani razredi so črkovani in ne uporabljajo simbolov, kot so zgoraj opisani za jhatanaliza odlagališča kopičenja na podlagi. Z desno miškino tipko lahko kliknete kateri koli razred na zavihku »Razredi« in izberete »Prikaži v pogledu primerkov«, da si ogledate podrobnosti o vsakem posameznem primerku izbranega razreda. To je prikazano na naslednjem posnetku zaslona.

Zaključek

VisualVM ponuja več prednosti pri ustvarjanju in analiziranju odlagališč kopičenja. Prvič, vse od ustvarjanja do analize je na enem mestu. Drugič, podatki so na voljo v bolj predstavljivi obliki z grafično podporo. Končno lahko v orodju VisualVM v povezavi z analizo kopičenja kopice uporabimo tudi druga orodja. VisualVM ponuja na enem mestu številne potrebe po razvoju, odpravljanju napak in analizi uspešnosti razvijalca Java.

Dodatne reference

⇒ Odpravljanje težav z Java SE

Guide Vodič za odpravljanje težav za Java SE 6 z HotSpot JVM (PDF)

White Java SE 6 Performance White Paper

⇒ Kaj je v moji kopiji Java?

⇒ Analiziranje Java Java z jmap in jhat

Prof Profiliranje pomnilnika Java z jmap in jhat

To zgodbo "Heap Dump and Analysis with VisualVM" je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found