Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 1 19/15/2023 1. REVISIÓN Y APROBACIÓN Elaboró Revisó Aprobó Alex David Usuga Alex David Usuga William Renan Santos Analista de LD Analista de LD IT Productos Latam DHL DHL DHL 2. CONTROL DE CAMBIOS Revisión Fecha de modificación Cambios realizados Vigencia 1 19/15/2023 Ninguno N/A 3. OBJETIVO Objetivo que se busca al implementar este procedimiento. Liberar parte de memoria RAM utilizada por los procesos de Java a través de GC. 4. ALCANCE Este procedimiento afecta únicamente parte de la memoria que es utilizada por el proceso parametrizado en el archivo registry. El servidor afectado es en cual este proceso es efectuado. 5. RESPONSABLE Alex David Usuga, Analista de LD. 6. FRECUENCIA DE LA REVISIÓN Este procedimiento se revisará por lo menos una vez al año, en cualquier mes o antes si hay algún cambio o mejora significativos en el proceso. 7. DEFINICIONES Definición de los términos que se utilizan durante el procedimiento y que requieren de una explicación más detallada de su concepto. GC: El recolector de elementos no utilizados (GC) administra automáticamente las solicitudes de asignación de memoria dinámica de la aplicación. Un recolector de elementos no utilizados realiza una gestión de memoria dinámica automática a través de las siguientes operaciones: • Asigna y devuelve memoria al sistema operativo. • Entrega esa memoria a la aplicación a medida que la solicita. • Determina qué partes de esa memoria todavía están en uso por la aplicación. • Recupera la memoria no utilizada para que la aplicación la reutilice. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 2 19/15/2023 Summary/Overview : Muestra cuatro gráficas; Uso de la memoria, los hilos del proceso, las clases cargadas y el uso de la CPU Memory : Información detallada sobre el uso de la memoria. Igualmente aporta gráficas y “combos” para seleccionar un tipo de memoria concreta Threads : Información detallada e individual del uso de hilos. Igualmente muestra su propia gráfica Classes : Informa sobre el número de clases cargadas y descargadas. VM Summary : Muestra información sobre la máquina virtual; como el uso de hilos, memoria consumida y algunos parámetros del OS MBeas : Aquí se presenta una serie de directorios en árbol que contiene los métodos y clases que permiten controlar el proceso java. Ya vimos en la primera entrada que esto corresponde a la cala de instrumentación. De todas las pestañas nos vamos a centrar tan solo en tres de ellas y especialmente en la pestaña “Memory“. 8. DESCRIPCIÓN DE ACTIVIDADES A. El primer paso es buscar el archivo registry, es donde está parametrizado las conexiones a la BD, nombre del servicio web, RF, entorno y por supuesto los parámetros de JAVA VM. Esto normalmente está en esta ruta en Windows: \\ntv6prd.suppla.com\e$\JDA\NTV6WMSPD\LES\data B. Después de haber identificado el archivo se procede a modificar el parámetro: [JAVA] vm=C:\Program Files\Java\jre1.8.0_162\bin\java.exe vmargs=-Xms2048m -Xmx12288m -Dlog4j2.formatMsgNoLookups=true XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC vmargs.mgendoc=-Xmx756M native-vmargs=-Xmx128m -Dlog4j2.formatMsgNoLookups=true XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC El parámetro que está en rojo es el que pertenece al Garbage collector, este se agrega a la línea. Este tipo de GC es: “G1 is a generational, incremental, parallel, mostly concurrent, stop-the-world, and evacuating garbage collector which monitors pause-time goals in each of the stop-the-world pauses. Similar to other collectors, G1 splits the heap into (virtual) young and old generations. Space-reclamation efforts concentrate on the young generation where it is most efficient to do so, with occasional space-reclamation in the old generation Some operations are always performed in stop-the-world pauses to improve throughput. Other operations that would take more time with the application stopped such as whole-heap operations like global marking are performed in Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 3 19/15/2023 parallel and concurrently with the application. To keep stop-the-world pauses short for space-reclamation, G1 performs space-reclamation incrementally in steps and in parallel. G1 achieves predictability by tracking information about previous application behavior and garbage collection pauses to build a model of the associated costs. It uses this information to size the work done in the pauses. For example, G1 reclaims space in the most efficient areas first (that is the areas that are mostly filled with garbage, therefore the name).” Imagen 1. Parametro de GC. C. Despues de configurar el parametro se debe reiniciar el servicio MOCA y RF, en este caso para Windows. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 4 19/15/2023 Imagen 2. Servicios de Windows. D. En este paso ya está todo configurado para realizar el proceso de barrido a través de jconsole.exe que está en la siguiente ruta: C:\Program Files\Java\jdk1.8.0_162\bin. Copiamos la ruta y luego ejecutamos CMD como administrador. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 5 19/15/2023 Imagen 3. Copiar e ir a la ruta, para esto se antecede CD. E. Para ejecutar y administrar un proceso de java se debe obtener el PID o process ID. Para esto vamos al administrador de tareas para visualizarlo o si no está habilitado por favor seguir lo de la imagen. Imagen 4. Habilitar PID y línea de comando F. Después tener visual del PID que corresponde al de la aplicación, digitarlo en la consola de CMD, jconsole.exe 16784, el numero corresponde al PID del proceso. Imagen 5. PID correspondiente al proceso para monitorear y controlar. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 6 19/15/2023 Imagen 6. Digitar jconsole.exe y el PID. Después de haber agregado la línea damos enter y este nos llevará a la consola, antes de ingresar nos mostrará un pantallazo del tipo de conexión si es segura y si nos queremos conectar, a lo que damos clic a (Insecure connection). Imagen 7. Conexión al PID a través de jconsole. G. Estando en la consola nos vamos a la pestaña que dice memory. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 7 19/15/2023 Imagen 8. Acceder a la pestaña de memory. Podemos ver el uso de memoria del proceso. Imagen 9. Consumo de memoria del PID, en el momento está consumiendo 11 GB de RAM. Damos clic al botón de Perform GC, este ejecutará el proceso e iniciará a eliminar hilos del proceso que no esté utilizando y los que si los llevará a otra partición y otros los remarcará para dejarlos activos. Procedimiento Garbage Collector Java Responsable: Fecha de revisión Código: Alex David Usuga 19/15/2023 PR-01 Pagina: Referencia: Fecha de emisión: 8 19/15/2023 Imagen 9. Después de haber dado clic a perform GC. Nota: Después de haber dado clic a perform GC la memoria iniciará a depurarse, esto no significa que la memoria quede totalmente optimizada, solo matará procesos o hilos que ya no están usándose en este proceso, si esto no funciona significa que la memoria como recurso está corta para todo el nivel operativo por la cantidad de RF o pantallas en simultaneo.