Los objetos son creados en memoria para atender las solicitudes entrantes. Cuando el requerimiento es atendido, los objetos recién creados se volverán inútiles (es decir, basura). Esta basura debe ser expulsada de la memoria para que haya suficiente espacio creado en la memoria para atender las nuevas solicitudes entrantes. Si no hay suficiente memoria, la aplicación puede experimentar tiempos de respuestas deficientes, OutOfMemoryError y bloqueos fatales.

En Java, Android, C#, etc, el Garbage Collection es automático, al contrario de algunos lenguajes de programación (C, C++) el programador debe escribir código en forma explícita para liberar los objetos utilizados. Por lo tanto, es una gran ventaja para los desarrolladores de aplicaciones Java, Android y C#. Pero la activación automática del Garbage Collection puede tener un profundo impacto en:

  1. Tiempo de respuesta de la aplicación
  2. CPU
  3. Memoria

Tiempo de Respuesta de la Aplicación

Para que el Garbage Collector actué automáticamente, toda la aplicación debe pausarse intermitentemente para marcar los objetos que están en uso y limpiar los objetos que no se usan. Durante este período de pausa, todas las transacciones de los clientes que están en movimiento en la aplicación se estancarán (es decir, se congelarán). Dependiendo del tipo de algoritmo de GC y de la configuración de memoria que configure, los tiempos de pausa se pueden ejecutar desde unos pocos milisegundos hasta unos pocos segundos o unos pocos minutos. Por lo tanto, el Garbage Collector puede afectar los SLA (Service Level Agreement) de la aplicación significativamente.

CPU

El Garbage Collector consume muchos ciclos de CPU. Cada aplicación tendrá miles/millones de objetos en la memoria. Cada objeto en la memoria debe investigarse periódicamente para ver si esta en uso. Si está en uso, ¿quién lo esta haciendo referencia? ¿Están esas referencias todavía activas? Si no están en uso, deben ser desalojadas de la memoria. Todas estas investigaciones y cálculos requieren una cantidad considerable de potencia del CPU.

Memoria

Por supuesto, una configuración del GC pobre puede conducir a un alto consumo de memoria y viceversa. La mayoría de las aplicaciones saturan la memoria primero antes de saturar otros recursos (CPU, ancho de banda de red, almacenamiento). La mayoría de las aplicaciones actualizan su tamaño de instancia EC2 para obtener memoria adicional en lugar de obtener CPU adicionales o ancho de banda de red.

Por lo tanto, para contar con SLA de primer nivel y reducir la factura de su proveedor de alojamiento en la nube, el GC de la aplicación debe funcionar de manera efectiva. Para estudiar y optimizar el impacto de la recolección de basura en el rendimiento de la aplicación, se debe habilitar el Registro del GC. Además de eso, los registros de GC se pueden usar para solucionar problemas relacionados con la memoria de la aplicación.

Activación de los Logs para el GC

GC Logging se puede habilitar pasando las propiedades del sistema mencionadas más abajo durante el inicio de la aplicación.

En Java 8:

A continuación se muestra la propiedad del sistema que es compatible con todas las versiones de Java hasta JDK 8.

En Java 9:

A continuación se muestra la propiedad del sistema que es compatible con todas las versiones de Java comenzando con JDK 9.

Como se analiza el GC

Aquí hay un registro de muestra de GC generado cuando se pasaron las propiedades de sistemas anteriores:

Un registro de GC tiene mucha información, sin embargo, no es fácil comprender los registros de GC. No hay suficiente documentación para explicar el formato de registro del GC. Además de eso, el formato de registro de GC no está estandarizado. Varía según el proveedor de JVM (Oracle, IBM, HP, …), la versión de Java (1, 4, 5, 6, 7, 8, 9), el algoritmo de GC (serie, paralelo, CMS, G1, Shenandoah), las propiedades del sistema de GC que pasa (-XX:+ Print GC, -XX: + PrintGCDetails, … ). En función de está permutación y combinación, hay fácilmente más de 60 formatos de registro de GC.

Por lo tanto, para analizar los registros de GC, es muy recomendable utilizar herramientas de análisis de registro de GC como GCeasy, HPJmeter. Estas herramientas analizan los registros de GC y generan grandes visualizaciones gráficas de los datos, informan indicadores de rendimiento clave y muchas otras métricas útiles.


Este artículo esta basado en What Is a Garbage Collection Log and How Can You Enable and Analyze It?

Garbage Collection Log, activación y análisis
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Google+
Google+
Etiquetado en:        

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook
A %d blogueros les gusta esto: