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:
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:
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:
Si le da ese error posiblemente su kernel no lo soporte ó el cgroup no está montado, modificiamos el siguiente archivo agregando los siguientes valores:
Actualizamos el grub y reiniciamos el server:
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:
Vemos como aparece cambiado el memory de 0 anterior por los 268435456:
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,
Suscribirse a:
Entradas (Atom)