archivo de registro java gc GIRANDO

El registro de GC es una herramienta importante para optimizar el rendimiento de las aplicaciones y solucionar problemas de memoria. Los registros de recolección de basura se pueden generar en una ruta de archivo específica pasando el argumento JVM "-Xloggc".

-Xloggc:/home/GCEASY/gc.log

Configure el archivo gc usando este método: cada vez que se reinicia la aplicación, el archivo de registro de GC antiguo será sobrescrito por el nuevo archivo de registro de GC porque la ruta del archivo es la misma (es decir, /home/GCEASY/gc.log). Por lo tanto, no podrá analizar los registros de GC antiguos que existían antes de reiniciar la aplicación. Especialmente cuando la aplicación falla o ocurren algunos problemas de rendimiento, necesita registros de GC antiguos para su análisis.

Una estrategia sencilla para aliviar este desafío es escribir nuevo contenido de registro de GC en una ubicación de archivo diferente. En este artículo, se comparten contigo 2 estrategias diferentes: 

1. Sufijo de marca de tiempo al archivo de registro de GC

Si puede añadir al archivo de registro del GC un sufijo con la marca de tiempo del reinicio de la JVM, la ubicación del archivo de registro del GC será única. Entonces los nuevos registros de GC no sobrescribirán los registros de GC antiguos. Se puede lograr mediante la siguiente figura:

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc-%t.log"

'%t' añade al archivo de registro gc una marca de tiempo con el formato: 'AAAA-MM-DD_HH-MM-SS'. Entonces, el nombre del archivo de registro de GC generado comenzará a verse así: 'gc-2019-01-29_20-41-47.log'

Este método también tiene un pequeño problema: problema de crecimiento del tamaño del archivo.

Supongamos que si no reinicia la JVM, el tamaño del archivo de registro del GC puede crecer hasta alcanzar un tamaño enorme. Porque en esta estrategia solo se crearán nuevos archivos de registro de GC cuando reinicie la JVM. Pero en mi opinión esto no es un problema importante, ya que un evento de GC sólo ocupa unos pocos bytes. Por lo tanto, el tamaño del archivo de registro del GC no crecerá más allá de un punto manejable para la mayoría de las aplicaciones. 

2、Usar -XX:+UsarGCLogFileRotation

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"

Al pasar "-XX:-UseGCLogFileRotation", la propia JVM habilita la rotación del registro de GC.

  • '-XX:NumberOfGClogFiles' establece la cantidad de archivos utilizados al rotar registros, debe ser >= 1. Los archivos de registro rotados utilizarán el siguiente esquema de nombres, <nombre de archivo>.0, <nombre de archivo>.1,…, <nombre de archivo>.n-1.
  • '-XX:GCLogFileSize' define el tamaño del archivo de registro en el cual se rotará el registro; debe ser >= 8K

Sin embargo, este método también tiene algunos pequeños problemas:

1)Perder registros de GC antiguos

Supongamos que si configura -XX:NumberOfGCLogFiles=5, en un período de tiempo se crearán 5 archivos de registro de GC:

gc.log.0 — oldest GC Log content
gc.log.1
gc.log.2
gc.log.3
gc.log.4 — latest GC Log content

El contenido del registro de GC más reciente se escribirá en "gc.log.4" y el contenido del registro de GC antiguo aparecerá en "gc.log.0".

Cuando la aplicación comience a generar más registros de GC que los "-XX:NumberOfGCLogFiles" configurados (5 en este caso), se eliminará el contenido del registro de GC antiguo en gc.log.0. Los nuevos eventos de GC se escribirán en gc.log.0. Esto significa que no terminará generando todos los registros de GC.

2)Registros de GC mezclados

Supongamos que la aplicación crea archivos de registro de 5 gc, a saber

gc.log.0
gc.log.1
gc.log.2
gc.log.3
gc.log.4

Luego, digamos que estás reiniciando la aplicación. Ahora el nuevo registro de GC se escribirá en el archivo gc.log.0 y el contenido del registro de GC antiguo aparecerá en gc.log.1, gc.log.2, gc.log.3, gc.log.4, es decir.

gc.log.0 — GC log file content after restart
gc.log.1 — GC log file content before restart
gc.log.2 — GC log file content before restart
gc.log.3 — GC log file content before restart
gc.log.4 — GC log file content before restart

Por lo tanto, el contenido del nuevo registro de GC se confunde con el antiguo registro de GC. Para aliviar este problema, es posible que deba mover todos los registros antiguos de GC a una carpeta diferente antes de reiniciar la aplicación.

3) Analizar registros a través de herramientas:

Ahora, para analizar archivos de registro de GC con herramientas de GC como (gceasy.io, GCViewer…), debe cargar varios archivos de registro de GC en lugar de solo un archivo de registro de GC.

ARCHIVOS DE REGISTRO DE GC GIRATORIOS – GC easy – Analizador de registros de GC universal Java

Supongo que te gusta

Origin blog.csdn.net/liuxiao723846/article/details/128910146
Recomendado
Clasificación