JMap og Jstack for nybegynnere

JMap og Jstack for nybegynnere
JMap og Jstack er sannsynligvis de mest verdifulle verktøyene i verktøykassen til enhver Java -utvikler. Med funksjonaliteten til begge disse verktøyene kombinert, kan du feilsøke problemer og kjøre diagnostikk for Java -programmet du koder. Som det mest grunnleggende par feilsøkingsverktøy er det viktig at du vet hvordan du skal jobbe med dem.

Dette kommer til å bli en tutorial om JMAP- og JSTACK -verktøy i Java for nybegynnere. Når du er ferdig med denne opplæringen, har du en bedre ide om hvordan disse to verktøyene kan hjelpe deg med feilsøking og feilsøking.

Kjørende diagnostikk med Jstack

Jstack er i hovedsak et kommandolinjeverktøy som brukes i feilsøking. Med JStack kan du ha tråddumpene for spesifikke programmer, prosesser eller Java -kjernefiler som vises for å identifisere problemene. Dette avslører på sin side flere detaljer som hele klassenavnet, navnet på metoden, elementets linjenummer og bytekodeindeksen. Jstack lar deg se hvilken handling hver kodeinje gjør når du kjører programmet.

Å kjøre diagnostikk er det JStack -verktøyet er mest brukt til. Du bruker JStack -kommandoen på en spesifikk kjernefil/ prosess, og den rapporterer tilbake hver tråd som er koblet til JVM (interne VM -tråder inkludert), samt de originale stack -rammene. I tillegg til dette, kan JStack også identifisere overlapping av ressursbruk (dødlåser) for å feilsøke programmet. Disse funksjonene lar brukere fjerne behovet for å stole på noe annet verktøy for å utføre en full diagnose for å gjøre unna feil eller feil i programmet.

Kjører en stabeldump

Hvis et program ikke svarer, eller hvis en prosess sitter fast, kan du finne den nøyaktige roten til problemet ved å kjøre en stakk dump. Det er spesielt nyttig når JStack ProcessID også svarer.

En typisk stabeldump skal ligne innholdet nedenfor:

Hente spor fra kjernedumper

Hvis du ikke er kjent med kjernedumper, er de minnedumper som holder en logg for filer eller programmer, og dokumenterer innholdet og oppgir på et bestemt tidspunkt, vanligvis når et problem lider en enestående krasj. Kjernedumps er ganske fleksible når det gjelder innholdet de kan holde: og kan gjøres veldig detaljert for spesielle applikasjoner.

For å trekke ut stakksporene fra en kjernedump, skriv ut kommandoen nedenfor:

$ Jstack $ java_home/bin/java core

Blandet stabel

Ofte vil du komme over feil som er for store til å bli identifisert med Java -stabler alene. Det er her du trenger å trekke opp de innfødte stakkrammer og se de med Java -stablene. De innfødte rammene genereres ved hjelp av C/C ++ -språket, og disse kan være en livredder når det gjelder å kjøre diagnostikk.

For å skrive ut de innfødte stablene, bruk -M -kommandoen som illustrert nedenfor:


Identifisere lekkasjer med JMAP -verktøyet

Som en kommende Java -utvikler (jeg antar at du fremdeles er en nybegynner, hvorfor ellers ville du være på en JMAP -opplæring?), vil du kjøre diagnostikk mye oftere enn du kanskje skjønner. Problemene kan ha form av minnet rot, manifesterer seg som en kontinuerlig akkumulerende haug som ikke går bort så lett, eller kanskje som en forsinkelse i å slippe en arraylist.

For å balansere disse forskyvningene, vil du først identifisere disse lekkasjene før du jobber for å fikse dem. Det kraftigste verktøyet du har til din disposisjon i denne forbindelse er JMAP -verktøyet. JMAP -verktøyet lindrer problemet ved å registrere størrelsen og statusen til den akkumulerende haugen.

Slik bruker du JMAP -kommandoen når du plukker ut lekkasjene.

-Heap -kommando

Kommandoen -Heap -kommandoen avslører informasjon om haugen i detalj. For eksempel kan du skaffe deg informasjon om GC -algoritmene, og honing inn på spesifikasjoner om hver tråd som er involvert i en av prosessene. Du kan også se bruksrapportene for haug, og i ganske fine detaljer også. JMAP vil avsløre informasjon om varmekapasitet og for øyeblikket tilgjengelig minne når det blir bedt om å generere Heap Reports.

Heaphistogram

For bedre å visualisere rapportene JMAP har presentert, kan det opprettes et histogram. For dette formål har du alternativet -histo som skriver ut histogrammet for en Java -prosessor -kjernefil. Når du brukes på en løpsprosess, vil du se minnestørrelsen i byte, hvor mange objekter som okkuperer dem, med klassenavnene sine.

$ Jmap -histo \/java/re/javase/6/siste/binær/solaris -sparc/bin/java core.27421

Før vi pakker opp:

Vi må snakke om Permanent generasjonsstatistikk. I Java er permanent generasjon en del av haugen som inneholder alt det pirrende grisete av den virtuelle maskinen. Blant annet inneholder den detaljer om metoden og klasseobjekter. Disse detaljene inkluderer det nøyaktige antallet klasser, antall byte som er i drift til hver klasselaster, adresse til klasselasteren så vel som adressen til foreldreklasselasteren, og en indikasjon på om programmet vil bli holdt eller sendt til søppelet Samling senere.

oppsummert

Nå som du vet hvordan du bruker Jstack og JMAP, har du to av de viktigste feilsøkingsverktøyene til disposisjonen. Denne opplæringen illustrerte hvordan du kan identifisere røttene til forskjellige problemer i programmet ditt ved å avsløre stabler og innfødte tråder. Vi diskuterte også hvordan man fikser lekkasjer.

Det er det for denne leksjonen. Til neste gang.