Error de asignación de página: ¿me estoy quedando sin memoria?

24

Últimamente, he notado entradas como esta en kern.loguno de mis servidores:

Feb 16 00:24:05 aramis kernel: swapper: page allocation failure. order:0, mode:0x20

Me gustaría saber:

  1. ¿Qué significa exactamente ese mensaje?
  2. ¿Se está quedando sin memoria mi servidor?

El uso de intercambio es bastante bajo (menos del 10%), y hasta ahora no he notado que se eliminen procesos debido a la falta de memoria.

Información Adicional:

  • El servidor es una instancia de Xen (DomU) que ejecuta Debian 6.0
  • Tiene 512 MB de RAM y una partición de intercambio de 512 MB
  • La carga de la CPU dentro de la máquina virtual muestra un promedio de 0.25
mfriedman
fuente

Respuestas:

14

El error de Debian 666021 parece ser un informe de este mismo problema. La sugerencia que hay es:

#change value for this boot
sysctl -w vm.min_free_kbytes=65536

#change value for subsequent boots
echo "vm.min_free_kbytes=65536" >> /etc/sysctl.conf

http://russ.garrett.co.uk/2009/01/01/linux-kernel-tuning/ tiene una discusión sobre cuándo puede ser útil modificar esta configuración, reproducida aquí:

Esto le dice al kernel que intente mantener 64MB de RAM libre en todo momento. Es útil en dos casos principales:

  • Máquinas sin intercambio, donde no desea que el tráfico entrante de la red abrume el núcleo y fuerce una OOM antes de que tenga tiempo de vaciar los búferes.

  • Máquinas x86, por la misma razón: la arquitectura x86 solo permite transferencias DMA por debajo de aproximadamente 900 MB de RAM. Por lo tanto, puede terminar con la extraña situación de un error OOM con toneladas de RAM libres.

Apliqué esta configuración en mi máquina 3.2.12-gentoo x86, pero sigo recibiendo estos errores.

Matt McHenry
fuente
Esto mismo puede ocurrir con ciertos dispositivos, por ejemplo, con el controlador MPT Fusion SCSI se recomienda mantener vm.min_free_kbytes alrededor de 100 megabytes. O al menos estaba acostumbrado, la última vez que tuve que usar esas cosas con distribuciones de Linux de 32 bits. Las cosas podrían haber cambiado desde entonces.
Janne Pikkarainen
ADVERTENCIA IMPORTANTE . echo 104857600 > /proc/sys/vm/min_free_kbytes CAUSÓ MI SISTEMA AL PÁNICO DE KERNEL, de forma reproducible . En el proceso, apareció un poco de texto en la pantalla que no tenía esperanzas de leer, pero los últimos mensajes se referían a mi dongle Wi-Fi, por lo que esta falla puede ser específica de mi sistema. Dicho esto, toca con precaución.
i336_
OH, está en kilobytes . No puedo recordar concretamente si hice 104857600 o 10485760, pero si hice lo primero, traté de reservar 100GB, que este portátil no tiene instalado;) Intentaré jugar con esto en una máquina virtual en algún momento.
i336_
1

Acabo de resolver este error en un Lenovo NAS que ejecuta Debian 5 y el kernel 2.6.39.3 de 64 bits.

Los mensajes son informativos a pesar de parecer aterrador, de acuerdo con https://www.novell.com/support/kb/doc.php?id=7002803

Sin embargo, estaban llenando mi partición raíz muy limitada (¿este dispositivo tiene una partición raíz de 50 MB?)

La solución para mí fue establecer vm.min_free_kbytesde 65536abajo a 16384.

Después, el sistema operativo todavía tiene 107 MB de memoria libre y 2 GB en búferes. Esto no tiene sentido, pero detuvo todo el registro.

Criggie
fuente