Garbage Collection Logboekregistratie naar een bestand in Java

1. Overzicht

Garbage collection is een wonder van de programmeertaal Java en voorziet ons van automatisch geheugenbeheer. Garbage collection verbergt de details van het handmatig toewijzen en vrijgeven van geheugen. Hoewel dit mechanisme fantastisch is, werkt het soms niet zoals we willen. In deze tutorial verkennen we Java's logboekopties voor statistieken over garbagecollection en ontdek hoe stuur deze statistieken door naar een bestand.

2. GC Logging Flags in Java 8 en eerder

Laten we eerst eens kijken naar de JVM-vlaggen met betrekking tot GC-logboekregistratie in Java-versies vóór Java 9.

2.1. -XX: + PrintGC

De -XX: + PrintGC flag is een alias voor -verbose: gc en schakelt basis GC-logboekregistratie in. In deze modus wordt een enkele regel gedrukt voor elke jonge generatie en elke volledige generatie collectie. Laten we nu onze aandacht richten op het verstrekken van gedetailleerde GC-informatie.

2.2. -XX: + PrintGCDetails

Evenzo hebben we de vlag -XX: + PrintGCDetails gewend om activeer gedetailleerde GC-logging in plaats van -XX: + PrintGC.

Merk op dat de uitvoer van -XX: + PrintGCDetails verandert afhankelijk van het gebruikte GC-algoritme.

Vervolgens kijken we naar het annoteren van onze logboeken met datum- en tijdinformatie.

2.3. -XX: + PrintGCDateStamps en -XX: + PrintGCTimeStamps

Wij kunnen data en timinginformatie toevoegen aan onze GC-logboeken door gebruik te maken van de vlaggen -XX: + PrintGCDateStamps en -XX: + PrintGCTimeStamps, respectievelijk.

Eerste, -XX: + PrintGCDateStamps voegt de datum en tijd van de logboekinvoer toe aan het begin van elke regel.

Tweede, -XX: PrintGCTimeStamps voegt een tijdstempel toe aan elke regel van het logboek met de tijd die is verstreken (in seconden) sinds de JVM is gestart.

2.4. -Xloggc

Eindelijk komen we bij het GC-logboek omleiden naar een bestand. Deze vlag heeft een optionele bestandsnaam als argument met behulp van de syntaxis -Xloggc: bestand en zonder de aanwezigheid van een bestandsnaam wordt het GC-logboek naar standaarduit geschreven.

Bovendien stelt deze vlag ook de -XX: PrintGC en -XX: PrintGCTimestamps vlaggen voor ons. Laten we eens kijken naar enkele voorbeelden:

Als we het GC-logboek naar standaarduitvoer willen schrijven, kunnen we het volgende uitvoeren:

java -cp $ CLASSPATH -Xloggc mijnpakket.MainClass

Of om het GC-log naar een bestand te schrijven, zouden we uitvoeren:

java -cp $ CLASSPATH -Xloggc: /tmp/gc.log mijnpakket.MainClass

3. GC Logging Flags in Java 9 en hoger

In Java 9+, -XX: PrintGC, de alias voor -verbose: gc, is afgeschaft ten gunste van de uniforme logboekoptie, -Xlog. Alle andere hierboven genoemde GC-vlaggen zijn nog steeds geldig in Java 9+. Deze nieuwe logging-optie stelt ons in staat om specificeer welke berichten getoond moeten worden, stel het logniveau in, en stuur de output om.

We kunnen de onderstaande opdracht uitvoeren om alle beschikbare opties voor logboekniveaus, logboekdecorateurs en tag-sets te zien:

java -Xlog: logging = debug -version 

Als we bijvoorbeeld alle GC-berichten in een bestand willen loggen, voeren we het volgende uit:

java -cp $ CLASSPATH -Xlog: gc * = debug: file = / tmp / gc.log mijnpakket.MainClass

Bovendien is deze nieuwe uniforme logging-vlag herhaalbaar, zodat u bijvoorbeeld log alle GC-berichten in zowel standaarduitgang als een bestand:

java -cp $ CLASSPATH -Xlog: gc * = debug: stdout -Xlog: gc * = debug: file = / tmp / gc.log mijnpakket.MainClass

4. Conclusie

In dit artikel hebben we laten zien hoe u uitvoer van garbagecollection in zowel Java 8 als Java 9+ registreert, inclusief hoe u die uitvoer omleidt naar een bestand.