Resolviendo warning de THP Pages en Redis
Uno de los problemas más comunes al utilizar REDIS dentro contenedores, es un warning que aparece al inicializar el contenedor.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
Este warning indica que es necesario hacer un cambio de settings en el Host para que Redis no tenga problemas de gestionar la memoria. No podemos hacerlo dentro del contenedor, porque no hay forma de hacerlo via linea de comandos o inclusive desde Docker-Compose.
En Linux:
Con ejecutar estas dos lineas, creamos la configuración suficiente para que Redis deje de indicar este warning. Es importante activar estos seteos en el HOST donde corre Docker.
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
En OSX:
En Mac, como sabes, Docker for Mac utiliza un emulador de linux llamado Hyperkit. Es necesario acceder al host de Hyperkit para poder ejecutar esos comandos.
Para acceder al host de Hyperkit, el mejor comando que encontré es utilizando Screen.
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
y luego si puedes alterar la configuración del host como hemos hecho en Linux.
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Luego, teclar CONTROL-A y CONTROL-D para salir de Screen.
Conclusion:
Está es una configuración que deberás configurar correctamente en Producción. Posiblemente alli tengas un cluste redis y no sea necesario, pero tenerlo en cuenta.
En Producción, siempre es mejor instalar Redis sin contenedores, por lo que esta receta es útil solo en algunos escenarios.