Pré-carregando o OOM Killer

5

Eu não tenho nenhuma partição / arquivo de swap na minha máquina e apenas 2 GB de RAM.

Às vezes acontece que a memória fica saturada por algum processo ( Xorg + navegador + compilador + ...) e o sistema trava indefinidamente, e a única maneira de reiniciá-lo (diferente de reinicialização forçada) é com o SysRq.

Eu entendi que o Out of Memory Killer não me ajudará porque quando a memória está completamente cheia, o kernel não pode alocar o Assassino OOM em si.

Existe alguma maneira de pré-carregar o OOM Killer, para que ele possa realmente funcionar quando a memória estiver completamente cheia?
Ou é possível ajustar o kernel para que o OOM Killer seja ativado quando meu RAM estiver cheio em ${TOTAL_RAM} - 10MB ?

    
por peoro 08.02.2011 / 10:12

4 respostas

6

Tenho quase certeza que o kernel reserva alguma memória para si mesmo, ou seja, para iniciar o oom_killer.

(Que uso seria um oom_killer se ele não carregasse devido à falta de memória?)

    
por 08.02.2011 / 10:47
6

O kernel aloca uma quantidade mínima de espaço livre por si. Você pode ver esse valor com:

$ sysctl vm.min_free_kbytes
vm.min_free_kbytes = 2842

$ cat /proc/sys/vm/min_free_kbytes
vm.min_free_kbytes = 2842

Este valor depende da quantidade de RAM (512 MB no Caso acima), você pode tentar aumentá-lo, mas eu não acho que isso vai resolver o seu problema (ainda mais irá aumentar a chance de obter mais OOM).

O assassino de OOM deve ter memória livre suficiente para matar os aplicativos, senão perderia o propósito de ter um (como Chris já apontou).

Editar : Apenas como uma nota lateral, não acho que seja a melhor maneira de resolver um problema relativo a programas de espaço do usuário, apenas modificando os parâmetros do kernel (valores OOM). O kernel tem melhor conhecimento sobre o que está acontecendo e como lidar com certas situações. Em vez de brincar com esses valores, tente consertar os problemas de memória gerados pelos programas de espaço do usuário (Xorg, navegador). Além disso, veja o comentário no arquivo-fonte mm / oom_kill.c , nem mesmo os desenvolvedores do kernel acham que o OOM killer deve ter muito trabalho para fazer em um ambiente bem configurado.

    
por 08.02.2011 / 15:30
2

Uma maneira de evitar isso seria desativar o tratamento heurístico de comprometimento excessivo e configurá-lo para não sobrecarregar: configure o sysctl vm.overcommit_memory = 2 e, em seguida, diminua vm.overcommit_ratio. Leia sobre este nos documentos do kernel .

Você também pode segmentar PIDs específicos para tratamento preferencial pela OOM modificando / proc / $ PID / oom_adj.

    
por 08.02.2011 / 15:28
0

the system hangs indefinitely

Se você quiser saber por que ele trava, veja a resposta para um question .

Se você quiser evitar que ele seja interrompido e apenas acionar o OOM-killer quase instantaneamente quando for necessário, você pode tentar o desajeitado patch do kernel na seção EDIT esta questão (nota: requer a recompilação do kernel).

    
por 30.08.2018 / 15:30