lunes, 8 de julio de 2019

Limites de Memoria y CPU en Docker

Límites de memoria y CPU:

Un container tiene acceso ilimitado a los recursos del sistema, asi que si uno ocupa toda la memoria los demás contenedores serán afectados.

Puedo aplicar un límite de memoria ó cpu a un contenedor específico.


Para esto crearemos 1 contenedor de debian, si no existe localmente lo descargará de docker-hub:     

# docker run -ti debian:1.0 /bin/bash
Para salir del terminal y no finalizar su ejecución presionamos Ctrl+p+q. 

Con el comando docker ps vemos que fue creada y está ejecutando:





Con el comando docker inspect y el id de contenedor verificamos el valor MemoryReservation:


# docker inspect 8592711fc458 | grep Memory

Vemos que el valor 0 marcado indica que ese contenedor no tiene valor limitado de memoria, es decir que utilizará todo lo que tenga disponible el host, posiblemente afectando a otros contenedores que estén dentro del mismo host.




Podemos limitar el uso de la memoria ejecutando el siguiente comando en caliente:

Le pasamos la cantidad que queremos como límite y el ID del contenedor al cuál aplicarlo:

# docker update -m 100MB bcd232430352


Si le da ese error posiblemente su kernel no lo soporte ó el cgroup no está montado, modificiamos el siguiente archivo agregando los siguientes valores:

# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

Actualizamos el grub y reiniciamos el server:

# update-grub
# reboot

Volvemos a iniciar el contenedor que finalizaron por el reinicio, pero ahora en vez de ejecutar el comando docker update lo hacemos directamente como parametro --memory en el docker run:

# docker run --memory 256M -it nginx:1.0 /bin/bash

Vemos como aparece cambiado el memory de 0 anterior por los 268435456:

# docker inspect 7dce57e73352 | grep Mem            "Memory": 268435456,            "CpusetMems": "",            "KernelMemory": 0,            "MemoryReservation": 0,            "MemorySwap": 536870912,            "MemorySwappiness": null,

No hay comentarios: