Ich habe Java so konfiguriert, dass Informationen zur Speicherbereinigung in die Protokolle ausgegeben werden ( ausführliche GC ). Ich bin mir nicht sicher, was die Garbage Collection-Einträge in den Protokollen bedeuten. Ein Beispiel dieser Einträge finden Sie unten. Ich habe mich bei Google umgesehen und keine soliden Erklärungen gefunden.
Ich habe einige vernünftige Vermutungen, aber ich suche nach Antworten, die strenge Definitionen der Bedeutung der Zahlen in den Einträgen liefern, gestützt auf glaubwürdige Quellen. Eine automatische +1 für alle Antworten, die die Sun-Dokumentation zitieren. Meine Fragen sind:
- Worauf bezieht sich PSYoungGen? Ich nehme an, es hat etwas mit der vorherigen (jüngeren?) Generation zu tun, aber was genau?
- Was ist der Unterschied zwischen dem zweiten und dem ersten Triplett von Zahlen?
- Warum wird ein Name (PSYoungGen) für das erste Triplett von Zahlen angegeben, nicht jedoch für das zweite?
- Was bedeutet jede Zahl (Speichergröße) im Triplett? Beispielsweise ist in 109884K-> 14201K (139904K) der Speicher vor GC 109884k und wird dann auf 14201K reduziert. Wie ist die dritte Nummer relevant? Warum sollten wir einen zweiten Satz von Zahlen benötigen?
8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0,0454530 Sekunden]
8112.111: [GC [PSYoungGen: 126649K-> 15528K (142336K)] 707780K-> 605892K (1121472K), 0,0934560 Sekunden]
8112.802: [GC [PSYoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895K (1097728K), 0,0682690 Sekunden]
quelle
Antworten:
Das meiste davon wird im GC-Tuning-Handbuch erklärt (das Sie sowieso gut lesen sollten).
Ich bin mir nicht sicher, warum in deinem ein PSYoungGen ist. Hast du den Müllsammler gewechselt?
quelle
Ein Beispiel für eine zugehörige vollständige GC zeigt auch die Sammler, die für die alten und dauerhaften Generationen verwendet wurden:
Zum Schluss eine Zeile Ihrer Beispielprotokollausgabe aufschlüsseln:
quelle
Ich wollte nur erwähnen, dass man das detaillierte GC-Protokoll mit dem bekommen kann
Parameter. Dann sehen Sie die PSYoungGen- oder PSPermGen-Ausgabe wie in der Antwort.
Auch
-Xloggc:gc.log
scheint die gleiche Leistung zu erzeugen , wie-verbose:gc
, aber Sie können eine Ausgabedatei im ersten angeben.Anwendungsbeispiel:
Um die Daten besser zu visualisieren, können Sie gcviewer ausprobieren (eine neuere Version finden Sie auf github ).
Achten Sie darauf, die Parameter korrekt zu schreiben. Ich habe das "+" vergessen und mein JBoss würde ohne Fehlermeldung nicht gestartet!
quelle
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution