Automatización – Solución de problemas de OutOfMemoryError

La solución de problemas de OutOfMemoryError o cualquier problema relacionado con la memoria se realiza manualmente incluso en 2019. La solución de problemas y la identificación de la causa raíz de OutOfMemoryError pueden incluso automatizarse siguiendo los 3 pasos mencionados a continuación:

1.Capturar volcado de pila
2.Reiniciar la aplicación
3. Diagnóstico de problemas

Analicemos estos pasos en detalle.

(1). Capturar volcado de pila

El volcado de montón es básicamente una instantánea de la memoria. Contiene detalles sobre los objetos que se presentan en la memoria, los datos reales que se encuentran dentro de esos objetos, las referencias que se originan en esos objetos… El volcado de almacenamiento dinámico es un artefacto vital para solucionar problemas de memoria.

Para diagnosticar OutOfMemoryError o cualquier problema relacionado con la memoria, uno tendría que capturar el volcado de almacenamiento dinámico justo en el momento o momentos antes de que la aplicación comience a experimentar OutOfMemoryError. Es difícil capturar el volcado del montón en el momento correcto de forma manual, porque no sabremos cuándo se lanzará OutOfMemoryError. Sin embargo, la captura de volcados de almacenamiento dinámico se puede automatizar pasando los siguientes argumentos de JVM cuando inicia la aplicación en la línea de comandos:

-XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH}

Ejemplo:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof

En ‘-XX: HeapDumpPath’, debe especificar la ruta del archivo donde se debe almacenar el volcado de almacenamiento dinámico.

Cuando pasa estos dos argumentos de JVM, los volcados de almacenamiento dinámico se capturarán automáticamente y se escribirán en una ruta de archivo específica, cuando se produzca OutOfMemoryError.

(2). Reiniciar aplicación

La mayoría de las veces, OutOfMemoryError no bloquea la aplicación. Sin embargo, es mejor reiniciar la aplicación, una vez que se lanza OutOfMemoryError. Porque OutOfMemoryError puede potencialmente dejar la aplicación en un estado inestable. Las solicitudes atendidas desde una instancia de aplicación inestable pueden generar un resultado erróneo.

También puede automatizar este proceso de reinicio. Escriba un script “restart-myapp.sh”, que cerrará y reiniciará su aplicación correctamente. Ahora especifique la ruta de este script en el argumento JVM ‘-XX:OnOutOfMemoryError’.

Ejemplo:

 -XX:OnOutOfMemoryError=/scripts/restart-myapp.sh

Cuando pasa este argumento, JVM invocará el script “/scripts/restart-myapp.sh” siempre que se produzca OutOfMemoryError. Por lo tanto, su aplicación se reiniciará automáticamente justo después de experimentar OutOfMemoryError.

(3). Diagnóstico de problemas

Ahora hemos capturado el volcado del montón (que es necesario para solucionar el problema), reiniciamos la aplicación (para reducir el impacto de la interrupción). El siguiente paso es la resolución de problemas. Esto puede ser un poco complicado 😊, pero se puede lograr con las herramientas adecuadas. Puedes usar herramientas como estera del eclipse, HeapHéroe para analizar volcados de pila. Estas herramientas generan un buen informe de análisis de memoria, destacando los objetos que causan la fuga de memoria. Sin embargo, la mayoría de las organizaciones realizan este paso manualmente.

Incluso este paso se puede automatizar invocando API REST de HeapHero. Esta API analiza el volcado del montón y devuelve un excelente informe de análisis. Puede invocar esta API justo después del script ‘restart-myapp.sh’. Por lo tanto, podrá automatizar la solución de problemas de OutOfMemoryError de extremo a extremo.

Feliz resolución de problemas.

Similar Posts

Leave a Reply

Your email address will not be published.