Dump heap i analiza s VisualVM-om

U prethodnim postovima na blogu obrađivao sam upotrebu VisualVM-a za dobivanje HotSpot JVM runtime podataka na način sličan jinfo i kako koristiti VisualVM zajedno s JMX-om i MBeans-om na način sličan JConsole-u. Ovo objavljivanje na blogu razmatra kako se VisualVM može koristiti za generiranje i analizu odlagališta hrpe na način sličan onome izvedenom s alatima naredbenog retka jmap i jhat.

Alat jmap (Java Memory Map) jedan je od nekoliko načina na koji se može generirati Java gomila izvatka. Alat za analizu hrpe Java (jhat) TechNotes / man stranica navodi četiri metode za generiranje odlagališta hrpe koje jhat može analizirati. Četiri navedene metode za generiranje izvatka hrpe su upotreba jmapJConsole (Java konzola za nadzor i upravljanje), HPROF i kada se dogodi OutOfMemoryError kada je navedena -XX:+HeapDumpOnOutOfMemoryErroropcija VM. Peti pristup koji nije na popisu, ali je jednostavan za korištenje, jest Java VisualVM. (Inače, druga metoda je upotreba MXBean-a nazvanog HotSpotDiagnosticMXBean i njegove metode dumpHeap (String, Boolean).)

jmapAlat je jednostavan za korištenje s komandne linije za proizvodnju snimka memorije. Može se koristiti protiv pokrenutog Java procesa čiji je piocess ID (pid) poznat (dostupan putem jps) ili protiv osnovne datoteke. U ovom postu usredotočit ću se na upotrebu jmaps ID-om pokrenutog procesa.

Na stranici jmap stoji da jmapje eksperimentalni alat s relativno ograničenim mogućnostima na sustavu Windows koji možda neće biti dostupan s budućim verzijama JDK-a. Ova stranica također navodi opcije dostupne za specificiranje kako jmaptreba generirati dump gomile.

Sljedeća snimka zaslona pokazuje kako jmapse može koristiti za bacanje hrpe.

Generirana dump datoteka, dustin.binu ovom je slučaju binarna, kao što je prikazano na sljedećoj snimci zaslona.

Alat može pročitati binarno odlagalište hrpe jhat. Sunčeva Java SE 6 uključivala je implementaciju jhatzamjene HAT-a, koja je prije bila dostupna kao zasebno preuzimanje. Gotovo je trivijalno trčati jhat. Treba se samo pozvati jhatna datoteku izvatka hrpe generiranu pomoću jmap(ili alternativnom tehnikom generiranja izvatka) kao što je prikazano na sljedećoj snimci zaslona.

S generiranim odlagalištem hrpe ( jmap) i jhatpozvanim alatom, odlagalište se može analizirati putem web preglednika. Izlaz na konzoli govori nam da je odlagalište dostupno na priključku 7000 (ovaj zadani priključak može se nadjačati s -portopcijom). Kad pokrenem preglednik na istom stroju na kojem sam pokrenuo jhat, mogu koristiti localhostza host dio URL-a. Početna stranica koja koristi localhost i port 7000 prikazana je na sljedećoj snimci zaslona.

Izjave jezika proizvoljnog objekta (OQL) mogu se napisati kako bi se pronašli potrebni detalji na dump-u gomile. jhat-Started web poslužitelj uključuje OQL pomoć na URL // localhost: 7000 / oqlhelp /. Također pogledajte Upit o Java Heap-u pomoću OQL-a za više detalja o tome kako koristiti OQL. Međutim, često se može pronaći ono što treba jednostavno koristeći se već pruženim informacijama i krećući se između pojedinih dijelova pomoću danih hiperveza.

Sljedeća snimka zaslona prikazuje jednu od korisnijih stranica dostupnih zahvaljujući jhatizlazu hrpe koji se temelji na web poslužitelju. Ova stranica prikazuje broj primjeraka različitih Java objekata, uključujući objekte platforme.

Značajna pomoć u razumijevanju značenja ovih web stranica jhatje VM specifikacija za format datoteke klase. U odjeljku 4.3.2 ("Deskriptori polja") ovog dokumenta nalazi se tablica koja prikazuje preslikavanje znakova deskriptora polja u tip podataka koji koristimo. Prema ovoj tablici, "B" označava a byte, "C" označava a char, "D" označava a double, "F" označava a float, "I" označava an integer, "J" označava a long, "L" označava referencu (primjer razred), "Z" označava a booleani [označava niz.

Do sada sam pogledao korištenje jmapi jhatiz naredbenog retka za generiranje odlagališta gomile i pružanje metode temeljene na web pregledniku za analizu generiranog odlagališta gomile. Iako su ovi alati relativno jednostavni za upotrebu, VisualVM pruža sličnu funkcionalnost u još jednostavnijem pristupu.

Jedna od metoda za generiranje odlagališta hrpe u Visual VM-u je jednostavno desnim klikom na željeni postupak i odabirom "Heap Dump". Ova je metoda prikazana na sljedećem snimku zaslona.

Ovo generira dump heap kako je naznačeno njegovim imenom ispod Java procesa.

Drugi pristup za generiranje izvatka hrpe s VisualVM-om je klikanje Java procesa koji vas zanima kako bi se relevantne kartice ("Pregled", "Monitor", "Threads" i "Profiler") pojavile u VisualVM-u. Odabirom kartice "Monitor" prikazuje se gumb "Heap Dump", kao što je prikazano na sljedećoj snimci zaslona.

Klikom na gumb "Heap Dump" generira se hemp dump, baš kao što je bilo i s gore opisanom opcijom desnog klika. To je prikazano na sljedećoj snimci zaslona, ​​koja se u ovom slučaju prikazuje na kartici "Sažetak" analiziranog odlagališta hrpe.

Osim kartice "Sažetak" analize odlagališta hrpe, na kartici "Razred" predstavljeni su i drugi zanimljivi detalji s odlagališta hrpe. Ova kartica uključuje vodoravne trakasti grafikoni koji grafički prikazuju postotak ukupnih primjeraka povezanih sa svakom klasom. Primjer je prikazan na sljedećem snimku zaslona.

Prikazane klase su napisane, umjesto da koriste simbole poput onih gore opisanih za jhatbazalnu analizu hrpe. Desnom tipkom miša možete kliknuti bilo koju klasu na kartici "Classes" i odabrati "Show in Instance View" da biste vidjeli detalje o svakoj pojedinačnoj instanci odabrane klase. To je prikazano na sljedećem snimku zaslona.

Zaključak

VisualVM pruža nekoliko prednosti pri stvaranju i analiziranju odlagališta hrpe. Prvo, sve je od stvaranja do analize na jednom mjestu. Drugo, podaci se pružaju u onome što se može smatrati predstavljivijim formatom s grafičkom podrškom. Konačno, i drugi alati mogu se koristiti u VisualVM-u zajedno s analizom dump hrpe. VisualVM nudi na jednom mjestu kupnju mnogih potreba za razvojem, uklanjanjem pogrešaka i analizom performansi Java programera.

Dodatne reference

Oting Rješavanje problema s Java SE

Guide Vodič za rješavanje problema za Java SE 6 s HotSpot JVM (PDF)

White Java SE 6 Bijela knjiga o performansama

⇒ Što je u mojoj Java hrpi?

⇒ Analiziranje Java gomila pomoću jmap i jhat

Prof Profiliranje Java memorije pomoću jmap i jhat

Ovu je priču "Izbacivanje hrpe i analiza s VisualVM-om" izvorno objavio JavaWorld.