Cómo limitar el uso del espacio de disco para las grabaciones de JFR (Java Flight Recorder) en volcados (dumps) dentro de un contenedor Docker?
Comienzo un vuelo continuo con respecto a mi aplicación de la siguiente manera:
java -XX:StartFlightRecording:filename=jfr-logs/ ...
Cada vez que se detiene la aplicación, se genera un nuevo archivo en el directorio jfr-logs:
ls -l jfr-logs
-rw-r--r-- 1 jumar staff 2.2M Dec 13 09:28 hotspot-pid-57471-id-1-2021_12_13_09_28_01.jfr
-rw-r--r-- 1 jumar staff 1.0M Dec 13 09:28 hotspot-pid-57923-id-1-2021_12_13_09_28_19.jfr
Me gustaría asegurarme de que no haya más de X cantidad de estos archivos y/o que no ocupen más de Y MB de espacio en disco.
Ejecuto esta aplicación en un contenedor Docker y el directorio jfr-logs
se almacena en un volumen persistente.
davy.ai
Dado que el directorio
jfr-logs
se almacena en un volumen persistente, podemos crear un script bash sencillo para comprobar el número de archivos y el espacio total en disco utilizado por el directoriojfr-logs
. Aquí tienes un ejemplo:Este script primero establece el número máximo de archivos JFR (
MAX_FILES
) y el espacio total máximo en disco utilizado por los archivos JFR en megabytes (MAX_DISK_SPACE
). Luego obtiene el número actual de archivos JFR y el espacio total en disco utilizado por ellos utilizando los comandosfind
ydu
, respectivamente.Si el número de archivos excede el límite, el script elimina los archivos más antiguos hasta que el número de archivos esté por debajo del límite. Si el espacio total en disco utilizado excede el límite, el script elimina los archivos más antiguos hasta que el espacio total en disco utilizado esté por debajo del límite.
Para ejecutar este script en un contenedor Docker, puedes crear una nueva imagen Docker que incluya este script y cualquier otra dependencia necesaria, y luego ejecutar un contenedor a partir de esta imagen de la siguiente manera:
Esto montará el directorio
jfr-logs
del host en/jfr-logs
dentro del contenedor y ejecutará el scriptcheck_jfr_logs.sh
dentro del contenedor. Luego puedes programar este comando para que se ejecute periódicamente utilizando un trabajo cron u una herramienta similar para mantener bajo control el número de archivos JFR y el uso total del espacio en disco.