É possível acionar OOM-killer em troca forçada?

21

É possível que o sistema troque preventivamente páginas inativas ( vm.swappiness ), mas invoque o oom-killer quando o sistema ficar sem memória RAM (ao invés de ficar sem memória) e for forçado a trocar?

O objetivo final é impedir que o sistema pare de funcionar quando começar a debater o disco por causa de falhas importantes na página, mas ainda permitir que páginas inativas sejam trocadas.

Outro desejo seria configurar a quantidade de memória swap que o sistema é forçado a usar antes dos acionadores oom-killer. Desta forma, o sistema pode mergulhar em swap um pouco, contanto que não vá longe demais. Ou eu poderia definir um limite para acionar o killer antes de usar toda a RAM, para que sempre haja espaço para o cache do sistema de arquivos (e, assim, evitar mais surras de disco).

Não parece que isso seria tão difícil de fazer. Parece que você poderia apenas dizer ao OOM-killer para acionar quando o sistema tiver X ram usado / livre. Mas é por isso que estou perguntando; Não sei.

Para esclarecimentos, não estou querendo desativar o swap ou ajustar o parâmetro vm.swappiness

    
por Patrick 12.05.2012 / 21:14

2 respostas

19

Eu também lutei com essa questão. Eu só quero que meu sistema permaneça responsivo, não importa o quê, e eu prefiro perder processos para esperar alguns minutos. Parece não haver nenhuma maneira de conseguir isso usando o kernel oom killer.

No entanto, no espaço do usuário, podemos fazer o que quisermos. Então eu escrevi o Daemon Early OOM ( link ) que matará o maior processo (por RSS) quando a RAM disponível ficar abaixo de 10%.

Sem o earlyoom, foi fácil bloquear minha máquina (8 GB de RAM) iniciando link algumas vezes. Agora, as guias culpadas do navegador são mortas antes que as coisas saiam do controle.

    
por 29.01.2014 / 00:44
3

Isso soa como uma solução excessivamente elaborada. Eu sugeriria (e eu faço isso em máquinas que eu configurei que não precisam hibernar) simplesmente alocando uma pequena quantidade de espaço de troca (128-256MiB). Desta forma, o kernel pode trocar algumas páginas, mas o OOM-killer é invocado antes que as coisas fiquem ruins.

Se você realmente quiser fazer isso, eu acho que você precisará escrever seu próprio script / programa que monitora o uso de swap e invoca o OOM-killer usando o chave do Magic SysReq (que pode ser feito programaticamente escrevendo para /proc/sysrq-trigger ).

    
por 13.05.2012 / 06:52