Solucionar uso de memoria Swap en nodo Docker
Como seguramente ya sabrás en los nodos de un clúster de contenedores con Docker lo recomendado es deshabilitar la memoria transaccional o swap. Pero en muchos casos la infraestructura a administrar dista bastante de lo ideal, por lo que en muchos casos la falta de memoria volátil o RAM, hace que tengamos que tirar de la swap.
Si a pesar de tener memoria volátil disponible el sistema usa la swap, es que algo está mal en la configuración de la «swapiness», como vimos en una entrada anterior, llamada: Tunear la SWAP en servidores GNU/Linux con swappiness
Solventar problemas de uso de Swap en Docker
De manera predeterminada Docker recomienda usar un valor de «vm.swapiness=0«, lo que evita el uso de la memoria de intercambio, exceptuando en el caso extremo de una condición OOM, esto es «out of memory», es decir, sin memoria volátil disponible. Además todos los nodos deben establecer el valor «vm.overcommit_memory=1«, que le indica al núcleo del sistema que siempre permita asignaciones de memoria hasta que no haya realmente memoria.
Causa de problemas
Si el valor «vm.swapiness» se establece superior a 0, es probable que solo se esté utilizando la memoria de intercambio en el nodo, a pesar de tener memoria volátil disponible.
Encontrar una solución
Para configurar con éxito el parámetro «vm.swappiness=0» y «vm.overcommit_memory=1», debemos seguir estos pasos:
- 1. Verificar los valores actuales:
- 2. Cambiar los valores si es necesario:
- 3. Verificar que los cambios se han hecho correctamente:
- 4. Además, podemos hacer verificaciones adicionales, consulta los procesos ubicados en «/proc/sys/vm»
sudo sysctl -a |grep 'vm.swapp*\|vm.over*'
sudo sysctl vm.swappiness=0 sudo sysctl vm.overcommit_memory=1
sudo sysctl -a |grep 'vm.swapp*\|vm.over*'
cat /proc/sys/vm/overcommit_memory cat /proc/sys/vm/swappiness
Y esto es todo. Espero que esta información os sea de utilidad en algún momento.
Fuentes consultadas
Support.docker.com – Node using swap memory instead of host memory