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?)
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
?
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.
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.
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).