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:
  • sudo sysctl -a |grep 'vm.swapp*\|vm.over*'
  • 2. Cambiar los valores si es necesario:
  • sudo sysctl vm.swappiness=0
    sudo sysctl vm.overcommit_memory=1
  • 3. Verificar que los cambios se han hecho correctamente:
  • sudo sysctl -a |grep 'vm.swapp*\|vm.over*'
  • 4. Además, podemos hacer verificaciones adicionales, consulta los procesos ubicados en «/proc/sys/vm»
  • 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