Java Virtual Machine (JVM) genera 3 artefactos críticos que son útiles para optimizar el rendimiento y solucionar problemas de producción. Esos artefactos son:

  1. Registro de recolección de basura (GC)
  2. Volcado de hilo
  3. Volcado de montón

1. Registro de recolección de basura

a) ¿Qué es un registro de GC?

El registro de GC contiene información relacionada con los eventos de recolección de elementos no utilizados. Indicará cuántos eventos de GC se ejecutaron, qué tipo de comando es este comando de eventos de GC (es decir, Young GC o Full GC), cuánto tiempo pausa la aplicación cada evento de GC, cuántos objetos recuperó cada evento de GC.

b) ¿Qué aspecto tiene un registro de GC?

Puede encontrar un archivo de registro de recolección de basura de muestra aquí.

c) ¿Dónde se utilizan los registros de GC?

Los registros de recolección de elementos no utilizados se utilizan para estudiar el GC y el rendimiento de la memoria de la aplicación. Se usa para optimizar los tiempos de pausa del GC, se usa para identificar el tamaño de memoria óptimo para su aplicación, también se usa para solucionar problemas relacionados con la memoria.

d) ¿Cómo generar un registro de GC?

Puede generar registros de recolección de basura pasando los siguientes argumentos de JVM:

En las versiones de Java hasta la 8:

En la versión de Java a partir de 9:

ruta del archivo: es la ubicación donde se escribirá el archivo de registro de recolección de elementos no utilizados.

e) ¿Cómo entender un registro de GC?

El formato del registro de recolección de basura varía dependiendo de quién sea su proveedor de JVM (Oracle, HP, IBM, Azul, ..), versión de Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), basura algoritmo de recopilación (Serial, Parallel, CMS, G1, Shenandoah, Z GC) y los argumentos de JVM que pasa. Por lo tanto, no hay un formato estandarizado disponible. Sin embargo, aquí hay un tutorial en video que intenta ayudarlo a comprender el formato del archivo de registro de GC.

f) ¿Qué herramientas se utilizan para analizar un registro de GC?

Existen múltiples herramientas de análisis de registro de recolección de basura. Algunos de los más populares se dan aquí: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. Volcado de subprocesos

a) ¿Qué es un volcado de subprocesos?

Un volcado de subprocesos es una instantánea de todos los subprocesos que se ejecutan en la aplicación en un momento dado. Contiene toda la información sobre cada subproceso en la aplicación, como el estado del subproceso, la identificación del subproceso, la identificación nativa, el nombre del subproceso, el seguimiento de la pila y la prioridad.

b) ¿Qué aspecto tiene un volcado de subprocesos?

Puede encontrar un volcado de hilo de muestra aquí.

c) ¿Dónde se utiliza un volcado de subprocesos?

Los volcados de subprocesos se utilizan principalmente para solucionar problemas de producción, como picos de CPU, falta de respuesta en la aplicación, tiempo de respuesta deficiente, subprocesos colgados, alto consumo de memoria.

d) ¿Cómo generar un volcado de subprocesos?

Los volcados de subprocesos se pueden capturar desde la aplicación en ejecución utilizando 8 opciones diferentes. La opción más común para realizar un volcado de subprocesos es usar la herramienta ‘jstack’. La herramienta jstack se envía en la carpeta JDK_HOMEbin. Este es el comando que debe ejecutar para capturar el volcado de subprocesos:

pid: es el ID de proceso de la aplicación, cuyo volcado de hilo debe capturarse

file-path: es la ruta del archivo donde se escribirá el volcado de subprocesos.

e) ¿Cómo entender un volcado de subprocesos?

Aquí hay una charla en video que brinda una buena descripción detallada sobre cómo entender los volcados de subprocesos.

f) ¿Qué herramientas se utilizan para analizar un volcado de subprocesos?

Estas son las herramientas de análisis de volcado de subprocesos más utilizadas: fastThread, Samurai, IBM Thread & Monitor Analyzer, Visual VM

3. Volcado de pila

a) ¿Qué es un volcado de montón?

Un volcado de montón es una instantánea de la memoria de su aplicación en un punto en el tiempo. Contiene información como cuáles son los objetos en la memoria, qué valores llevan, cuál es su tamaño, a qué otros objetos hacen referencia.

b) ¿Qué aspecto tiene un volcado de pila?

Puede encontrar un volcado de montón de muestra aquí. (Nota: estará en formato binario, por lo que en realidad no puede leerlo).

c) ¿Dónde se utiliza un volcado de almacenamiento dinámico?

Los volcados de almacenamiento dinámico se utilizan principalmente para solucionar problemas relacionados con la memoria, OutOfMemoryError.

d) ¿Cómo generar un volcado de montón?

El volcado de almacenamiento dinámico se puede capturar desde la aplicación en ejecución mediante 7 opciones diferentes. La opción más común para realizar un volcado de almacenamiento dinámico es usar la herramienta ‘jmap’. La herramienta jmap se envía en la carpeta JDK_HOMEbin. Este es el comando que debe ejecutar para capturar:

pid: es el ID del proceso de Java, cuyo volcado de almacenamiento dinámico debe capturarse

file-path: es la ruta del archivo donde se escribirá el volcado de almacenamiento dinámico.

e) ¿Cómo entender un volcado de pila?

Los archivos de volcado de montón están en formato binario y tienden a ser de gran tamaño. Además de eso, su formato carece en gran medida de documentación. Por lo tanto, debe usar las herramientas de análisis de volcado de pila (que se proporcionan en la siguiente pregunta) para analizarlas y comprenderlas.

f) ¿Qué herramientas se utilizan para analizar un volcado de montón?

Estas son las herramientas de análisis de volcado de montón más utilizadas: Eclipse MAT, HeapHero, JVisualVM.
Esperamos que este artículo cubra todos los métodos para analizar registros de recolección de elementos no utilizados, volcados de subprocesos y volcados de pila. Si este artículo le resultó realmente útil, comparta esta información con sus amigos, parientes, familiares y otras personas. Nos vemos en las próximas publicaciones con signalfix.net!