Heim >Java >javaLernprogramm >Detaillierte Erläuterung der ParallelGC-Protokolle

Detaillierte Erläuterung der ParallelGC-Protokolle

Patricia Arquette
Patricia ArquetteOriginal
2024-09-24 16:15:49924Durchsuche

ParallelGC 日志详解

JVM-Startparameter

JAVA_OPTS = "-Xms4G -Xmx4G -Xmn2G -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -XX:+UseParallelGC -XX:+PrintGCDetails -Xloggc:/home/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC"

JVM-Startparameter festlegen

  • -XX:+PrintGCDetails: Detaillierte GC-Informationen ausgeben, einschließlich der Heap-Speichernutzung nach jeder Garbage Collection und des Status vor und nach der Collection.
  • -Xloggc:/home/gc.log: Speichern Sie GC-Protokolle in der Datei /home/gc.log, anstatt sie an die Konsole auszugeben. Dadurch können die Protokolle analysiert werden, nachdem die Anwendung ausgeführt wurde.
  • -XX:+PrintGCDateStamps: Fügen Sie jedem GC-Protokolldatensatz einen Datumsstempel hinzu, um die Anzeige des Zeitpunkts der Speicherbereinigung zu erleichtern.
  • -XX:+PrintGCTimeStamps: Fügen Sie jedem GC-Protokoll die verstrichene Zeit nach dem JVM-Start in Sekunden hinzu.
  • -XX:+PrintHeapAtGC: Drucken Sie den detaillierten Status des Heaps vor und nach der Garbage Collection, einschließlich der Speicherzuordnung jeder Generation (junge Generation, alte Generation, Metaspace).
  • -XX:+UseParallelGC: Verwenden Sie Parallel GC (Parallel Garbage Collector), um die Leistung zu verbessern, indem Sie die Garbage Collection parallel mit mehreren Threads ausführen.

GC-Protokollausschnitt

OpenJDK 64-Bit Server VM (25.342-b07) for linux-amd64 JRE (1.8.0_342-b07), built on Jul 16 2022 09:19:19 by "openjdk" with gcc 4.4.7 20120313 (Red Hat 4.4.7-23)
Memory: 4k page, physical 8388608k(8386904k free), swap 0k(0k free)
CommandLine flags: -XX:CompressedClassSpaceSize=528482304 -XX:InitialHeapSize=4294967296 -XX:MaxHeapSize=4294967296 -XX:MaxMetaspaceSize=536870912 -XX:MaxNewSize=2147483648 -XX:MetaspaceSize=536870912 -XX:NewSize=2147483648 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC

2024-09-24T10:43:44.094+0800: 21.703: Total time for which application threads were stopped: 0.0015655 seconds, Stopping threads took: 0.0000978 seconds
{Heap before GC invocations=11 (full 0):
 PSYoungGen      total 1494528K, used 1466389K [0x0000000790800000, 0x00000007f0800000, 0x00000007f0800000)
  eden space 1414656K, 100% used [0x0000000790800000,0x00000007e6d80000,0x00000007e6d80000)
  from space 79872K, 64% used [0x00000007eba00000,0x00000007eec85748,0x00000007f0800000)
  to   space 78336K, 0% used [0x00000007e6d80000,0x00000007e6d80000,0x00000007eba00000)
 ParOldGen       total 2621440K, used 72408K [0x00000006f0800000, 0x0000000790800000, 0x0000000790800000)
  object space 2621440K, 2% used [0x00000006f0800000,0x00000006f4eb60e0,0x0000000790800000)
 Metaspace       used 114761K, capacity 120350K, committed 120576K, reserved 1155072K
  class space    used 13324K, capacity 14260K, committed 14336K, reserved 1048576K
2024-09-24T10:43:44.149+0800: 21.759: [GC (Allocation Failure) [PSYoungGen: 1466389K->41915K(1492992K)] 1538798K->152295K(4114432K), 0.0591035 secs] [Times: user=0.16 sys=0.01, real=0.06 secs]
Heap after GC invocations=11 (full 0):
 PSYoungGen      total 1492992K, used 41915K [0x0000000790800000, 0x00000007f0800000, 0x00000007f0800000)
  eden space 1414656K, 0% used [0x0000000790800000,0x0000000790800000,0x00000007e6d80000)
  from space 78336K, 53% used [0x00000007e6d80000,0x00000007e966ee58,0x00000007eba00000)
  to   space 78336K, 0% used [0x00000007ebb80000,0x00000007ebb80000,0x00000007f0800000)
 ParOldGen       total 2621440K, used 110380K [0x00000006f0800000, 0x0000000790800000, 0x0000000790800000)
  object space 2621440K, 4% used [0x00000006f0800000,0x00000006f73cb088,0x0000000790800000)
 Metaspace       used 114761K, capacity 120350K, committed 120576K, reserved 1155072K
  class space    used 13324K, capacity 14260K, committed 14336K, reserved 1048576K
}
2024-09-24T10:43:44.209+0800: 21.818: Total time for which application threads were stopped: 0.0593724 seconds, Stopping threads took: 0.0000333 seconds


{Heap before GC invocations=906 (full 2):
 PSYoungGen      total 2065920K, used 2041627K [0x0000000760800000, 0x00000007e0800000, 0x00000007e0800000)
  eden space 2034688K, 100% used [0x0000000760800000,0x00000007dcb00000,0x00000007dcb00000)
  from space 31232K, 22% used [0x00000007de980000,0x00000007df046e10,0x00000007e0800000)
  to   space 31232K, 0% used [0x00000007dcb00000,0x00000007dcb00000,0x00000007de980000)
 ParOldGen       total 2097152K, used 2080736K [0x00000006e0800000, 0x0000000760800000, 0x0000000760800000)
  object space 2097152K, 99% used [0x00000006e0800000,0x000000075f7f8060,0x0000000760800000)
 Metaspace       used 176015K, capacity 189742K, committed 191104K, reserved 1218560K
  class space    used 19024K, capacity 21351K, committed 21632K, reserved 1048576K
2024-09-24T14:14:45.047+0800: 11571.644: [GC (Allocation Failure) [PSYoungGen: 2041627K->26414K(2061312K)] 4122363K->2109278K(4158464K), 0.0208053 secs] [Times: user=0.07 sys=0.00, real=0.02 secs]
Heap after GC invocations=906 (full 2):
 PSYoungGen      total 2061312K, used 26414K [0x0000000760800000, 0x00000007e0800000, 0x00000007e0800000)
  eden space 2034688K, 0% used [0x0000000760800000,0x0000000760800000,0x00000007dcb00000)
  from space 26624K, 99% used [0x00000007dcb00000,0x00000007de4cba70,0x00000007de500000)
  to   space 33792K, 0% used [0x00000007de700000,0x00000007de700000,0x00000007e0800000)
 ParOldGen       total 2097152K, used 2082863K [0x00000006e0800000, 0x0000000760800000, 0x0000000760800000)
  object space 2097152K, 99% used [0x00000006e0800000,0x000000075fa0be58,0x0000000760800000)
 Metaspace       used 176015K, capacity 189742K, committed 191104K, reserved 1218560K
  class space    used 19024K, capacity 21351K, committed 21632K, reserved 1048576K
}
{Heap before GC invocations=907 (full 3):
 PSYoungGen      total 2061312K, used 26414K [0x0000000760800000, 0x00000007e0800000, 0x00000007e0800000)
  eden space 2034688K, 0% used [0x0000000760800000,0x0000000760800000,0x00000007dcb00000)
  from space 26624K, 99% used [0x00000007dcb00000,0x00000007de4cba70,0x00000007de500000)
  to   space 33792K, 0% used [0x00000007de700000,0x00000007de700000,0x00000007e0800000)
 ParOldGen       total 2097152K, used 2082863K [0x00000006e0800000, 0x0000000760800000, 0x0000000760800000)
  object space 2097152K, 99% used [0x00000006e0800000,0x000000075fa0be58,0x0000000760800000)
 Metaspace       used 176015K, capacity 189742K, committed 191104K, reserved 1218560K
  class space    used 19024K, capacity 21351K, committed 21632K, reserved 1048576K
2024-09-24T14:14:45.068+0800: 11571.665: [Full GC (Ergonomics) [PSYoungGen: 26414K->0K(2061312K)] [ParOldGen: 2082863K->300700K(2097152K)] 2109278K->300700K(4158464K), [Metaspace: 176015K->174750K(1218560K)], 0.6404574 secs] [Times: user=1.88 sys=0.00, real=0.64 secs]
Heap after GC invocations=907 (full 3):
 PSYoungGen      total 2061312K, used 0K [0x0000000760800000, 0x00000007e0800000, 0x00000007e0800000)
  eden space 2034688K, 0% used [0x0000000760800000,0x0000000760800000,0x00000007dcb00000)
  from space 26624K, 0% used [0x00000007dcb00000,0x00000007dcb00000,0x00000007de500000)
  to   space 33792K, 0% used [0x00000007de700000,0x00000007de700000,0x00000007e0800000)
 ParOldGen       total 2097152K, used 300700K [0x00000006e0800000, 0x0000000760800000, 0x0000000760800000)
  object space 2097152K, 14% used [0x00000006e0800000,0x00000006f2da7140,0x0000000760800000)
 Metaspace       used 174750K, capacity 187618K, committed 191104K, reserved 1218560K
  class space    used 18827K, capacity 20997K, committed 21632K, reserved 1048576K
}

Anwendungspausenzeit

Während des GC-Prozesses werden alle Threads der Anwendung angehalten, was als „Stop-The-World“ (STW)-Ereignis bezeichnet wird. Die Pausenzeit wirkt sich direkt auf die Leistung und Reaktionsfähigkeit der Anwendung aus.

Protokollbeispiel:

2024-09-24T10:43:44.094+0800: 21.703: Total time for which application threads were stopped: 0.0015655 seconds, Stopping threads took: 0.0000978 seconds

Gesamtzeit, für die Anwendungsthreads gestoppt wurden:

  • Die Gesamtzeit, die der Anwendungsthread angehalten wurde, beträgt hier 0,0015655 Sekunden (~1,57 Millisekunden).

Das Anhalten von Threads dauerte:

  • Die Zeit, die zum Anhalten des Threads aufgewendet wurde, hier 0,0000978 Sekunden (ungefähr 0,098 Millisekunden).

GC (Minor GC)

Protokollbeispiel

2024-09-24T10:43:44.149+0800: 21.759: [GC (Allocation Failure) [PSYoungGen: 1466389K->41915K(1492992K)] 1538798K->152295K(4114432K), 0.0591035 secs]
  • GC-Typ: Minor GC, ausgelöst durch einen Speicherzuordnungsfehler (Allocation Failure).
  • Änderungen der jungen Generation: von 1466389K auf 41915K, Gesamtkapazität 1492992K.
  • Gesamtänderung im Heap-Speicher: von 1538798 KB auf 152295 KB, Gesamtkapazität 4114432 KB.
  • Benötigte Zeit: 0,0591035 Sekunden (ca. 59 Millisekunden).

Vollständige GC

Protokollbeispiel:

2024-09-24T14:14:45.068+0800: 11571.665: [Full GC (Ergonomics) [PSYoungGen: 26414K->0K(2061312K)] [ParOldGen: 2082863K->300700K(2097152K)] 2109278K->300700K(4158464K), [Metaspace: 176015K->174750K(1218560K)], 0.6404574 secs]
  • GC-Typ: Vollständige GC, ausgelöst durch den adaptiven JVM-Mechanismus (Ergonomie).
  • Wechsel der jungen Generation: von 26414K auf 0K, was darauf hinweist, dass die junge Generation vollständig recycelt wurde.
  • Änderungen der alten Generation: von 2082863K auf 300700K reduziert, wodurch viel Speicher frei wird.
  • Gesamtänderung im Heap-Speicher: von 2109278 KB auf 300700 KB, Gesamtkapazität 4158464 KB.
  • Metaspace-Änderung: von 176015K auf 174750K reduziert.
  • Benötigte Zeit: 0,6404574 Sekunden (ca. 640 Millisekunden).

Detaillierter Status des Heap-Speichers

Aufgrund der Verwendung des Parameters -XX:+PrintHeapAtGC druckt das GC-Protokoll den detaillierten Status des Heap-Speichers vor und nach jedem GC, einschließlich der Kapazität und Nutzung jedes Speicherbereichs.

Protokollbeispiel:

Heap before GC invocations=11 (full 0):
 PSYoungGen      total 1494528K, used 1466389K [0x0000000790800000, 0x00000007f0800000, 0x00000007f0800000)
  eden space 1414656K, 100% used [0x0000000790800000,0x00000007e6d80000,0x00000007e6d80000)
  from space 79872K, 64% used [0x00000007eba00000,0x00000007eec85748,0x00000007f0800000)
  to   space 78336K, 0% used [0x00000007e6d80000,0x00000007e6d80000,0x00000007eba00000)
 ParOldGen       total 2621440K, used 72408K [0x00000006f0800000, 0x0000000790800000, 0x0000000790800000)
  object space 2621440K, 2% used [0x00000006f0800000,0x00000006f4eb60e0,0x0000000790800000)
 Metaspace       used 114761K, capacity 120350K, committed 120576K, reserved 1155072K
  class space    used 13324K, capacity 14260K, committed 14336K, reserved 1048576K
  • PSYoungGen (junge Generation):

    • Gesamt (Gesamtkapazität): 1494528K.
    • gebraucht: 1466389K.
    • Eden Space (Eden Area): Kapazität 1414656K, Nutzungsrate 100 %.
    • aus dem Weltraum (Survivor-Bereich): Kapazität 79872K, Nutzungsrate 64 %.
    • zum Weltraum (Survivor-Bereich): Kapazität 78336K, ungenutzt.
  • ParOldGen (alte Generation):

    • Gesamt (Gesamtkapazität): 2621440K.
    • Verwendet: 72408K, Nutzungsrate beträgt ca. 2 %.
  • Metaspace:

    • gebraucht: 114761K.
    • Kapazität: 120350K.

Korrespondenz zwischen JVM-Startparametern und GC-Protokollen

Aufgrund der manuellen Einstellung der JVM-Startparameter enthalten die GC-Protokolle detailliertere Informationen, die eine eingehende Analyse erleichtern:

  • Speicherzuweisung und -nutzung:

    • Mit -XX:+PrintHeapAtGC können Sie den Heap-Speicherstatus vor und nach jedem GC anzeigen und die Speicherzuordnung und -nutzung jedes Bereichs verstehen.
  • Zeitstempelinformationen:

    • -XX:+PrintGCDateStamps und -XX:+PrintGCTimeStamps liefern genaue Zeitinformationen, um die Analyse der Zeitpunkte und Intervalle von GC-Ereignissen zu erleichtern.
  • Details zur GC-Veranstaltung:

    • -XX:+PrintGCDetails gibt detaillierte Informationen wie die Art des GC-Ereignisses, den auslösenden Grund, den Speicherrecyclingstatus und den Zeitverbrauch aus.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der ParallelGC-Protokolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn