Programavimas

Kaupo kaupimas ir analizė naudojant „VisualVM“

Ankstesniuose tinklaraščio įrašuose aptariau „VisualVM“ naudojimą norint gauti „HotSpot“ JVM vykdymo laiko informaciją panašiai kaip „jinfo“ ir kaip „VisualVM“ naudoti kartu su „JMX“ ir „MBeans“ panašiai kaip „JConsole“. Šiame tinklaraščio įraše nagrinėjama, kaip „VisualVM“ gali būti naudojama kuriant ir analizuojant kaupo sąvartyną panašiai kaip tai daroma naudojant komandinės eilutės įrankius „jmap“ ir „jhat“.

„Jmap“ („Java“ atminties žemėlapis) įrankis yra vienas iš kelių būdų, kaip galima sukurti „Java“ kaupo sąvartyną. „Java Heap Analysis Tool“ (jhat) „TechNotes / man“ puslapyje išvardyti keturi krūvos sąvartyno generavimo metodai, kuriuos galima analizuoti naudojant jhat. Keturi išvardyti būdai kaupti sąvartyną yra jmap, „JConsole“ („Java“ stebėjimo ir valdymo pultas), HPROF ir kai įvyksta „OutOfMemoryError“, kai -XX: + „HeapDumpOnOutOfMemoryError“ VM parinktis buvo nurodyta. Penktas metodas, kuris nėra išvardytas, tačiau yra lengvai naudojamas, yra „Java VisualVM“. (Beje, kitas metodas yra „MXBean“, vadinamo „HotSpotDiagnosticMXBean“, ir jo „dumpHeap“ (String, Boolean) metodo naudojimas.)

jmap įrankį paprasta naudoti iš komandinės eilutės, kad būtų sukurtas krūvos sąvartynas. Jis gali būti naudojamas prieš vykdomą „Java“ procesą, kurio piocess ID (pid) yra žinomas (pasiekiamas per jps), arba prieš pagrindinį failą. Šiame įraše daugiausia dėmesio skirsiu naudojimui jmap su vykdomo proceso ID.

Jmap puslapyje teigiama jmap yra eksperimentinis įrankis su gana ribotomis „Windows“ galimybėmis, kurio gali nebūti su būsimomis JDK versijomis. Šiame puslapyje taip pat pateikiamos galimos parinktys, kaip nurodyti jmap turėtų generuoti krūvos sąvartyną.

Šis ekrano momentinis vaizdas rodo, kaip tai padaryti jmap gali būti naudojamas krūvai mesti.

Sugeneruotas iškelties failas, šiukšliadėžė šiuo atveju yra dvejetainis, kaip parodyta kitame ekrano momentiniame vaizde.

Dvejetainio kaupo sąvartyną galima perskaityti naudojant jhat įrankis. „Sun“ „Java SE 6“ buvo įdiegta jhat pakeičia HAT, kuris anksčiau buvo prieinamas kaip atskiras atsisiuntimas. Beveik trivialu bėgti jhat. Reikia tik kreiptis jhat kaupo faile, sugeneruotame naudojant jmap (arba alternatyvi sąvartyno generavimo technika), kaip parodyta kitame ekrano momentiniame vaizde.

Su sugeneruotu kaupu (jmap) ir jhat Įkėlus įrankį, sąvartyną galima analizuoti naudojant interneto naršyklę. Konsolės išvestis nurodo, kad sąvartynas yra prieinamas 7000 prievade (šį numatytąjį prievadą galima nepaisyti -portas variantas). Kai naršyklę paleidžiu toje pačioje mašinoje, kuria paleidau jhat, Galiu naudoti vietinis šeimininkas URL prieglobos daliai. Pradinis puslapis naudojant „localhost“ ir „7000“ prievadą rodomas kitoje ekrano nuotraukoje.

Arbitrary Object Query Language (OQL) sakiniai gali būti parašyti norint rasti reikiamą informaciją krūvos sąvartyne. jhatPradėtame žiniatinklio serveryje yra OQL pagalba URL // localhost: 7000 / oqlhelp /. Taip pat žr. „Java Heap“ užklausa su OQL, jei norite gauti daugiau informacijos apie tai, kaip naudoti OQL. Tačiau dažnai galima rasti tai, ko reikia, tiesiog pasinaudodamas jau pateikta informacija ir judėdamas tarp informacijos dalių naudodamasis pateiktomis hipersaitais.

Šis ekrano momentinis vaizdas rodo vieną iš naudingesnių puslapių, kuriuos galite pasiekti jhatžiniatinklio serverio kaupiamojo išvesties išvestis. Šiame puslapyje rodomas įvairių „Java“ objektų, įskaitant platformos objektus, egzempliorių skaičius.

Reikšminga pagalba suprantant, ką sukūrė šie tinklalapiai jhat mean yra VM specifikacija klasės failo formate. Šio dokumento 4.3.2 skirsnyje („Laukų aprašai“) yra lentelė, kurioje parodytas lauko aprašo simbolių susiejimas su duomenų tipu, kurį naudojame. Pagal šią lentelę "B" reiškia a baitas, "C" reiškia a char, "D" reiškia a dvigubai, „F“ reiškia a plūdė, „I“ reiškia sveikasis skaičius, „J“ reiškia a ilgas, "L" žymi nuorodą (klasės egzempliorių), "Z" žymi a loginisir [ rodo masyvą.

Iki šiol aš pažvelgiau į naudojimą jmap ir jhat iš komandinės eilutės sugeneruoti kaupo sąvartyną ir pateikti žiniatinklio naršykle pagrįstą metodą sugeneruotam krūvos sąvartynui analizuoti. Nors šiuos įrankius naudoti yra gana paprasta, „VisualVM“ suteikia panašią funkciją dar lengviau.

Vienas iš būdų kaupti kaupą „Visual VM“ yra tiesiog dešiniuoju pelės mygtuku spustelėkite norimą procesą ir pasirinkite „Heap Dump“. Šis metodas parodytas kitoje ekrano nuotraukoje.

Tai sukuria kaupo sąvartyną, kaip nurodyta jo pavadinime po „Java“ procesu.

Antrasis būdas kaupti kaupą su „VisualVM“ yra spustelėti dominantį „Java“ procesą, kad „VisualVM“ atsirastų atitinkami skirtukai („Apžvalga“, „Monitorius“, „Temos“ ir „Profiler“). Pasirinkus skirtuką „Monitorius“, bus pateiktas mygtukas „Krūvos išpylimas“, kaip parodyta kitame ekrano momentiniame vaizde.

Spustelėjus mygtuką „Kaupo sąvartynas“, bus sukurtas krūvos sąvartynas taip pat, kaip ir naudojant aukščiau aprašytą dešinio paspaudimo parinktį. Tai rodoma kitoje ekrano nuotraukoje, kuri šiuo atveju rodo analizuojamo kaupo sąvartyno skirtuką „Santrauka“.

Be „kupino“ analizės skirtuko „Santrauka“, skirtuke „Klasė“ pateikiama ir kita įdomi informacija apie kaupo sąvartyną. Šiame skirtuke yra horizontalių juostų diagramos, kurios grafiškai nurodo visų egzempliorių, susietų su kiekviena klase, procentą. Pavyzdys parodytas kitame ekrano momentiniame vaizde.

Rodomos klasės yra išdėstytos, o ne naudojant tokius simbolius, kaip aprašyti aukščiau jhat-pagrindinė krūvos sąvartyno analizė. Dešiniuoju pelės mygtuku spustelėkite bet kurią klasę skirtuke „Klasės“ ir pasirinkite „Rodyti pavyzdžių rodinyje“, kad pamatytumėte išsamią informaciją apie kiekvieną atskirą pasirinktos klasės egzempliorių. Tai parodyta kitoje ekrano nuotraukoje.

Išvada

„VisualVM“ teikia keletą privalumų kuriant ir analizuojant kaupų sąvartynus. Pirma, viskas nuo kūrimo iki analizės yra vienoje vietoje. Antra, duomenys pateikiami tokiu formatu, kuris gali būti laikomas pateikiamesniu formatu su grafiniu palaikymu. Galiausiai „VisualVM“ taip pat gali būti naudojami kiti įrankiai kartu su kaupo analizės analize. „VisualVM“ suteikia galimybę vienu metu pasirinkti daugelį „Java“ kūrėjų kūrimo, derinimo ir našumo analizės poreikių.

Papildomos nuorodos

⇒ „Java SE“ trikčių šalinimas

⇒ „Java SE 6“ su „HotSpot JVM“ trikčių šalinimo vadovas (PDF)

⇒ „Java SE 6“ baltoji knyga

⇒ Kas yra mano „Java“ kaupe?

Java „Java Heaps“ analizavimas naudojant „jmap“ ir „jhat“

⇒ „Java“ atminties profiliavimas naudojant „jmap“ ir „jhat“

Šią istoriją „Kaupo kaupimas ir analizė naudojant„ VisualVM ““ iš pradžių paskelbė „JavaWorld“.

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