Saltar al contenido

¿Qué significa Docker cuando dice “Memoria limitada sin intercambio”?

Solución:

Esto es lo que encontré.

Swap no se utiliza de forma predeterminada. Puede verificar esto en contenedores Ubuntu / Debian en /sys/fs/cgroup/memory/memory.stat. Verifique el valor de intercambio, verá que está configurado en 0 (bytes). Sin uso de intercambio.

Puede habilitar y limitar el uso de intercambio con el --memory y --memory-swap banderas típicamente, y aquí es donde esta ADVERTENCIA parece que lo llevará. De la documentación de Docker con respecto a una advertencia muy similar:

Si no necesita estas capacidades, puede ignorar la advertencia. Puede habilitar estas capacidades en Ubuntu o Debian siguiendo estas instrucciones.

tl; dr: swap está deshabilitado por defecto. Si cgroup está deshabilitado o los límites de intercambio de contenedores se ven comprometidos como lo indica esta advertencia, no podrá establecer esos límites.

El demonio de Docker se basa en los siguientes archivos virtuales para implementar límites de memoria e intercambio:

/sys/fs/cgroup/memory/memory.limit_in_bytes
/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes

Si su kernel no admite el límite de memoria de intercambio, el segundo archivo no estará allí y docker run no impondrá ninguna limitación en el uso del espacio de intercambio. De esa manera, el contenedor incluso puede usar más intercambio que el -m, --memory escenario, como si --memory-swap había sido configurado para -1. Obviamente, el contenedor no puede usar más espacio de intercambio del que ha configurado en su sistema.

Sin embargo, el mensaje de advertencia también intenta decir esa opción. -m, --memory seguirá teniendo efecto y la cantidad máxima de memoria de usuario (incluida la memoria caché de archivos) se establecerá según lo previsto.


El punto de montaje cgroup mencionado puede diferir, consulte /proc/self/mounts.

Para el problema anterior, la instalación de Docker en Ubuntu 16.04 no podemos establecer límites. Esto se debe a que el intercambio de cgroups está deshabilitado de forma predeterminada.

Al intentar establecer límites, se le dará el siguiente error.

[email protected]: ~ # docker container run -d -ti –hostname testcontainer – name testubuntu2 –restart = always –memory = “50m” –memory-swap = 0 –cpus = “0.5” ubuntu: 16.04 ADVERTENCIA: Su el kernel no admite capacidades de límite de intercambio o el cgroup no está montado. Memoria limitada sin intercambio. 1fb75aba88e61cf4ca7c96fdd6db939b474d80c0d923233bcb176bf81224dc44
[email protected]: ~ #

Para resolver el problema anterior, actualice el archivo grub con la siguiente entrada:

[email protected]:~# cat /etc/default/grub |grep GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

Ahora actualice-grub:

[email protected]:~# update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-74-generic
Found initrd image: /boot/initrd.img-4.15.0-74-generic
done
[email protected]:~#

Reinicie la máquina una vez que lo haya hecho y cree un contenedor con límite de memoria:

[email protected]:~# docker container run -d -ti --hostname testcontainer -- 
name testubuntu2 --restart=always --memory="50m" --memory-swap=0 --cpus="0.5" 
ubuntu:16.04
93969354be0445f3458999259747d82231b4084728c3ccf8801dc89be8aadaa3
[email protected]:~#
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *