Java Virtual Machine (JVM) genererer 3 kritiske artefakter, der er nyttige til at optimere ydeevnen og fejlfinde produktionsproblemer. Disse artefakter er:

  1. Log for affaldsindsamling (GC).
  2. Tråddump
  3. Dyngedump

1. Affaldsopsamlingslog

a) Hvad er en GC-log?

GC Log indeholder oplysninger om affaldsindsamlingshændelser. Det vil indikere, hvor mange GC-begivenheder, der kørte, hvilken type denne kommando denne kommando af GC-begivenheder er (dvs. Young GC eller Full GC), hvor lang tid hver GC-begivenhed pauser applikationen, hvor mange objekter genvundne hver GC-begivenhed.

b) Hvordan ser en GC-log ud?

Eksempel på affaldsindsamlingslogfil kan findes her.

c) Hvor bruges GC-logs?

Affaldsopsamlingslogfiler bruges til at studere applikationens GC og hukommelsesydelse. Det bruges til at optimere GC-pausetider, det bruges til at identificere optimal hukommelsesstørrelse for din applikation, det bruges også til at fejlfinde hukommelsesrelaterede problemer.

d) Hvordan genereres en GC-log?

Du kan generere logfiler til affaldsopsamling ved at sende følgende JVM-argumenter:

På Java-versioner indtil 8:

På Java-version fra 9:

fil-sti: er det sted, hvor Garbage Collection-logfilen vil blive skrevet.

e) Hvordan forstår man en GC-log?

Affaldsindsamlingslogformatet varierer afhængigt af, hvem der er din JVM-leverandør (Oracle, HP, IBM, Azul, ..), Java-version (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), skrald indsamlingsalgoritme (Serial, Parallel, CMS, G1, Shenandoah, Z GC) og JVM-argumenter, du sender. Der er således ikke et standardiseret format tilgængeligt. Men her er en video-tutorial, som forsøger at hjælpe dig med at forstå GC-logfilformatet.

f) Hvilke værktøjer bruges til at analysere en GC-log?

Der er flere værktøjer til analyse af affaldsopsamlingslog. Nogle af de populære er givet her: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. Tråddump

a) Hvad er en tråddump?

Et tråddump er et øjebliksbillede af alle tråde, der kører i applikationen på et tidspunkt. Den indeholder alle oplysninger om hver tråd i applikationen, såsom trådtilstand, tråd-id, native-id, trådnavn, staksporing og prioritet.

b) Hvordan ser en tråddump ud?

Et eksempel på tråddump kan findes her.

c) Hvor bruges en tråddump?

Tråddumps bruges primært til fejlfinding af produktionsproblemer såsom CPU-spidser, manglende respons i applikationen, dårlig responstid, hængende tråde, højt hukommelsesforbrug.

d) Hvordan genererer man en tråddump?

Tråddumps kan fanges fra den kørende applikation ved hjælp af 8 forskellige muligheder. Den mest almindelige mulighed for at tage tråddump er at bruge ‘jstack’-værktøjet. jstack-værktøjet leveres i mappen JDK_HOMEbin. Her er kommandoen, du skal udstede for at fange tråddump:

pid: er proces-id’et for applikationen, hvis tråddump skal fanges

fil-sti: er filstien, hvor tråd dump vil blive skrevet ind til.

e) Hvordan forstår man en tråddump?

Her er en videosamtale, der giver et godt detaljeret overblik over, hvordan man forstår tråddumpene.

f) Hvilke værktøjer bruges til at analysere en tråddump?

Her er de mest udbredte thread dump analyseværktøjer: fastThread, Samurai, IBM Thread & Monitor analyzer, Visual VM

3. Dyngedump

a) Hvad er en bunkedump?

En heap dump er et øjebliksbillede af din applikations hukommelse på et tidspunkt. Den indeholder information, såsom hvad er objekterne i hukommelsen, hvilke værdier har de, hvad er deres størrelse, hvilke andre objekter refererer de til.

b) Hvordan ser en bunkedump ud?

En prøvebunkedump kan findes her. (Bemærk: Det vil være i binært format. Så du kan faktisk ikke læse det).

c) Hvor bruges en bunkedump?

Heap-dumps bruges primært til fejlfinding af hukommelsesrelaterede, OutOfMemoryError-problemer.

d) Hvordan genereres et heapdump?

Heap dump kan fanges fra den kørende applikation ved hjælp af 7 forskellige muligheder. Den mest almindelige mulighed for at tage heap dump er at bruge ‘jmap’-værktøjet. jmap-værktøjet leveres i mappen JDK_HOMEbin. Her er kommandoen, du skal udstede for at fange:

pid: er Java Process Id, hvis heap-dump skal fanges

fil-sti: er den filsti, hvor heap dump vil blive skrevet ind til.

e) Hvordan forstår man et bunkedump?

Heap dump-filer er i binært format og har tendens til at være store i størrelse. Udover det mangler deres format i høj grad dokumentation. Derfor skal du bruge heap dump-analyseværktøjerne (givet i næste spørgsmål) for at analysere og forstå dem.

f) Hvilke værktøjer bruges til at analysere en bunkedump?

Her er de mest udbredte heap dump analyseværktøjer: Eclipse MAT, HeapHero, JVisualVM.
Vi håber, at denne artikel dækker alle metoderne til, hvordan man analyserer logfiler til affaldsopsamling, tråddumper og dynger. Hvis du fandt denne artikel virkelig nyttig for dig, så del venligst denne information med dine venner, slægtninge, familie og andre. Vi ses i de næste indlæg med signalfix.net!