Falha na alocação de página - Estou ficando sem memória?

24

Ultimamente, tenho notado entradas como esta em kern.logum dos meus servidores:

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

Eu gostaria de saber:

  1. O que exatamente essa mensagem significa?
  2. Meu servidor está ficando sem memória?

O uso de troca é bastante baixo (menos de 10%) e, até agora, não notei nenhum processo sendo morto por falta de memória.

Informação adicional:

  • O servidor é uma instância do Xen (DomU) executando o Debian 6.0
  • Possui 512 MB de RAM e uma partição de swap de 512 MB
  • A carga da CPU dentro da máquina virtual mostra uma média de 0,25
mfriedman
fonte

Respostas:

14

O bug do Debian 666021 parece ser um relatório desse mesmo problema. A sugestão é:

#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/ tem alguma discussão sobre quando alterar essa configuração pode ser útil, reproduzido aqui:

Isso diz ao kernel para tentar manter 64 MB de RAM livre o tempo todo. É útil em dois casos principais:

  • Máquinas sem troca, nas quais você não deseja que o tráfego de rede de entrada sobrecarregue o kernel e force um OOM antes que ele tenha tempo de liberar os buffers.

  • máquinas x86, pelo mesmo motivo: a arquitetura x86 somente permite transferências de DMA abaixo de aproximadamente 900 MB de RAM. Portanto, você pode acabar com a situação bizarra de um erro de OOM com toneladas de RAM livre.

Apliquei essa configuração na minha máquina 3.2.12-gentoo x86, mas ainda estou recebendo esses erros.

Matt McHenry
fonte
Isso pode ocorrer exatamente com certos dispositivos; por exemplo, com o controlador MPT Fusion SCSI, é recomendável manter vm.min_free_kbytes em torno de 100 megabytes. Ou pelo menos estava acostumado, quando tive que usar essas coisas pela última vez com distribuições Linux de 32 bits. As coisas podem ter mudado desde então.
Janne Pikkarainen
AVISO IMPORTANTE . echo 104857600 > /proc/sys/vm/min_free_kbytes CAUSOU MEU SISTEMA PARA KERNEL PANIC, de forma reproduzível . Um pouco de texto apareceu na tela no processo que eu não tinha esperança de ler, mas as últimas mensagens diziam respeito ao meu dongle Wi-Fi, portanto, essa quebra pode ser específica para o meu sistema. Dito isto, cutuque com cautela.
i336_ 16/06
OH, está em kilobytes . Não me lembro concretamente se fiz 104857600 ou 10485760, mas se fiz o primeiro, tentei reservar 100 GB, que este laptop não tem instalado;) vou tentar mexer com isso em uma VM em algum momento.
i336_ 16/06
1

Acabei de solucionar esse erro em um NAS da Lenovo executando o Debian 5 e o kernel 2.6.39.3 de 64 bits.

As mensagens são informativas, apesar de assustadoras, de acordo com https://www.novell.com/support/kb/doc.php?id=7002803

No entanto, eles estavam preenchendo minha partição raiz muito limitada (este dispositivo possui uma partição raiz de 50 MByte?!)

A solução para mim foi definir vm.min_free_kbytesde 65536baixo para 16384.

Posteriormente, o sistema operacional ainda possui 107 MBytes de memória livre e 2 GB em buffers. Isso não faz sentido, mas parou todo o log.

Criggie
fonte