Programmēšana

Kaudzes izgāšana un analīze ar VisualVM

Iepriekšējos emuāra ierakstos esmu apskatījis VisualVM izmantošanu, lai iegūtu HotSpot JVM izpildlaika informāciju līdzīgi kā jinfo, kā arī to, kā VisualVM izmantot kopā ar JMX un MBeans līdzīgi kā JConsole. Šajā emuāra ievietošanā tiek aplūkots, kā VisualVM var izmantot, lai ģenerētu un analizētu kaudzes izgāztuvi līdzīgi kā tas tiek darīts ar komandrindas rīkiem jmap un jhat.

Jmap (Java atmiņas kartes) rīks ir viens no vairākiem veidiem, kā var izveidot Java kaudzes izgāztuvi. Java kaudzes analīzes rīka (jhat) TechNotes / man lapā ir uzskaitītas četras metodes kaudzes izgāztuves ģenerēšanai, kuras var analizēt, izmantojot jhat. Četras uzskaitītās metodes kaudzes izgāztuves ģenerēšanai ir jmap, JConsole (Java uzraudzības un pārvaldības konsole), HPROF un kad rodas OutOfMemoryError, kad -XX: + HeapDumpOnOutOfMemoryError VM opcija ir norādīta. Piektā pieeja, kas nav uzskaitīta, bet ir viegli lietojama, ir Java VisualVM. (Starp citu, cita metode ir MXBean izmantošana ar nosaukumu HotSpotDiagnosticMXBean un tā dumpHeap (virkne, Būla) metode.)

The jmap rīku ir vienkārši izmantot no komandrindas, lai izveidotu kaudzes izgāztuvi. To var izmantot pret darbojošos Java procesu, kura piocess ID (pid) ir zināms (pieejams caur jps), vai pret galveno failu. Šajā ierakstā es pievērsīšos lietošanai jmap ar notiekoša procesa ID.

Jmap lapā tas teikts jmap ir eksperimentāls rīks ar salīdzinoši ierobežotām Windows iespējām, kas, iespējams, nav pieejams nākamajās JDK versijās. Šajā lapā ir arī norādītas pieejamās opcijas, lai norādītu, kā jmap vajadzētu ģenerēt kaudzes izgāztuvi.

Šis ekrāna momentuzņēmums parāda, kā to izdarīt jmap var izmantot kaudzes izgāšanai.

Ģenerētais dump fails, dustin.bin šajā gadījumā ir binārs, kā parādīts nākamajā ekrāna momentuzņēmumā.

Binārā kaudzes izgāztuvi var nolasīt ar jhat rīks. Saules Java SE 6 ietvēra jhat aizstāj HAT, kas agrāk bija pieejama kā atsevišķa lejupielāde. Skriet ir gandrīz niecīgi jhat. Vajag tikai atsaukties jhat uz kaudzes izgāztuves faila, kas ģenerēts ar jmap (vai alternatīvu izgāztuves paņēmienu), kā parādīts nākamajā ekrāna momentuzņēmumā.

Ar izveidoto kaudzes izgāztuvi (jmap) un jhat izsaukts rīks, izgāztuvi var analizēt ar tīmekļa pārlūku. Konsoles izeja mums norāda, ka dump ir pieejams 7000. portā (šo noklusējuma portu var ignorēt ar -portu opcija). Kad pārlūku palaidu tajā pašā mašīnā, kurā darbojos jhat, Es varu izmantot vietējais saimnieks URL resursdatora daļai. Sākumlapa, kurā tiek izmantots localhost un ports 7000, tiek parādīta nākamajā ekrāna momentuzņēmumā.

Lai atrastu nepieciešamo informāciju kaudzes izgāztuvē, var rakstīt patvaļīgu objektu vaicājumu valodas (OQL) paziņojumus. The jhatSāktajā tīmekļa serverī ir iekļauta OQL palīdzība vietnē URL // localhost: 7000 / oqlhelp /. Skatiet arī Java kaudzes vaicāšana ar OQL, lai iegūtu sīkāku informāciju par OQL lietošanu. Tomēr bieži var atrast nepieciešamo, vienkārši izmantojot jau sniegto informāciju un pārvietojoties starp informācijas daļām, izmantojot sniegtās hipersaites.

Šis ekrāna momentuzņēmums parāda vienu no noderīgākajām lapām, kas pieejamas, pateicoties jhatkaudzes izgāztuves tīmekļa servera izvade. Šajā lapā tiek parādīts dažādu Java objektu, tostarp platformas objektu, gadījumu skaits.

Nozīmīgs palīgs, lai saprastu, ko šīs tīmekļa lapas rada jhat mean ir VM specifikācija klases faila formātā. Šī dokumenta 4.3.2. Sadaļā ("Lauku deskriptori") ir tabula, kurā parādīta lauku deskriptoru rakstzīmju kartēšana ar mūsu izmantoto datu tipu. Saskaņā ar šo tabulu "B" norāda a baits, "C" norāda a char, "D" norāda a dubultā, "F" norāda a peldēt, "I" norāda vesels skaitlis, "J" norāda a ilgi, "L" norāda atsauci (klases instanci), "Z" apzīmē a būla, un [ norāda masīvu.

Līdz šim esmu apskatījis lietošanu jmap un jhat no komandrindas, lai ģenerētu kaudzes izgāztuvi un nodrošinātu tīmekļa pārlūkprogrammā balstītu metodi ģenerētās kaudzes izgāztuves analizēšanai. Lai gan šie rīki ir salīdzinoši ērti lietojami, VisualVM nodrošina līdzīgu funkcionalitāti vēl vienkāršākā pieejā.

Viena metode kaudzes izgāztuves ģenerēšanai Visual VM ir vienkārši noklikšķināt ar peles labo pogu uz vajadzīgā procesa un atlasīt "Heap Dump". Šī metode ir parādīta nākamajā ekrāna momentuzņēmumā.

Tas ģenerē kaudzes izgāztuvi, kā norādīts tā nosaukumā zem Java procesa.

Otra pieeja kaudzes izgāztuves ģenerēšanai ar VisualVM ir noklikšķināt uz interesējošā Java procesa, lai VisualVM tiktu parādītas attiecīgās cilnes ("Pārskats", "Monitor", "Vītnes" un "Profilators"). Atlasot cilni "Monitor", tiek parādīta poga "Heap Dump", kā parādīts nākamajā ekrāna momentuzņēmumā.

Noklikšķinot uz pogas "Kaudzes izgāšana", tiek izveidots kaudzes izgāztājs tāpat kā ar iepriekš aprakstīto labā klikšķa opciju. Tas tiek parādīts nākamajā ekrāna momentuzņēmumā, kas šajā gadījumā notiek, lai parādītu analizētās kaudzes izgāztuves cilni "Kopsavilkums".

Papildus kaudzes izgāztuves cilnei "Kopsavilkums" cilnē "Klase" tiek parādīta arī cita interesanta informācija no kaudzes izgāztuves. Šajā cilnē ir horizontālas joslu diagrammas, kas grafiski norāda kopējo gadījumu skaitu, kas saistīti ar katru klasi. Piemērs ir parādīts nākamajā ekrāna momentuzņēmumā.

Parādītās klases ir izklāstītas, nevis izmantojot simbolus, piemēram, tos, kas aprakstīti iepriekš jhatbalstītas kaudzes izgāztuves analīze. Cilnē “Klases” var ar peles labo pogu noklikšķināt uz jebkuras klases un atlasīt “Rādīt instanču skatā”, lai skatītu detalizētu informāciju par katru atsevišķo atlasītās klases gadījumu. Tas tiek parādīts nākamajā ekrāna momentuzņēmumā.

Secinājums

VisualVM nodrošina vairākas priekšrocības, veidojot un analizējot kaudzes izgāztuves. Pirmkārt, viss no radīšanas līdz analīzei ir vienuviet. Otrkārt, dati tiek sniegti tādā formātā, kuru var uzskatīt par reprezentablāku ar grafisku atbalstu. Visbeidzot, VisualVM kopā ar kaudzes izgāztuves analīzi var izmantot arī citus rīkus. VisualVM nodrošina vienas pieturas iespēju daudzām Java izstrādātāja attīstības, atkļūdošanas un veiktspējas analīzes vajadzībām.

Papildu atsauces

Java Java SE problēmu novēršana

⇒ Java SE 6 ar HotSpot JVM problēmu novēršanas rokasgrāmata (PDF)

⇒ Java SE 6 veiktspējas baltā grāmata

⇒ Kas ir manā Java kaudzē?

Java Java Heaps analīze ar jmap un jhat

⇒ Java atmiņas profilēšana ar jmap un jhat

Šo stāstu "Kupu izgāšana un analīze ar VisualVM" sākotnēji publicēja JavaWorld.

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