Eu tenho uma máquina Linux bastante antiga com 2 GB de RAM, sem troca, e está funcionando muito bem, com o sistema usando todas as partes de memória não utilizadas para fazer cache com grande efeito.
No entanto, quando estou quase estressando a memória (por exemplo,> 1950 MB alocados), ela fica lenta; Eu suspeito que é porque não há buffers de disco restantes. Eu sei que o assassino da OOM logo entraria em vigor, mas geralmente não chega lá - está ficando tão lento que as cargas disparam para 30-40, nenhum processo progride (portanto, não aloca mais memória) e Eu tenho que reiniciar.
Quando tento simplesmente matar um processo para fazer com que a máquina responda, por exemplo, indo ao console (via Alt-F1, efetuando login e apenas executando um "processo ruim de killall"), geralmente funciona, exceto que tenho que esperar ~ 10 minutos entre usuário / senha e obter um prompt - enquanto houver atividade no disco.
Mais uma vez, não há troca, por isso não está trocando - é simplesmente emocionante porque não há buffers restantes.
Eu teria mais ou menos 100 MB dedicados exclusivamente aos buffers de disco, o que acionaria o killer do OOM mais cedo (afinal, menos memória para programas), mas, por outro lado, deixaria a máquina sempre responsiva.
Existe uma maneira de fazer isso? Não consegui encontrar uma entrada / proc / kernel ou / sys / vm que faça esse tipo de coisa.
Respostas:
Dê uma olhada em / proc / sys / vm / min_free_kbytes . É o limite de kbytes livres que aciona o oom-killer. Também seria bom checar nos registros a palavra-chave oom-killer para saber o que está sendo morto {provavelmente você não quer matar ssh , é melhor renitá- la}
fonte
Esperar o assassino liberar memória é um pouco como esperar que o motor pare no seu carro para lhe dizer quando é a hora de encher o tanque de gasolina. O assassino é uma ferramenta pesada, de último recurso e desespero por uma máquina carente de recursos. Ele mata o próximo programa em que toca, sem levar em consideração como isso afetará seu aplicativo, acessibilidade, confiabilidade e assim por diante. Quando o oom-killer é chamado, seu servidor está ofegante e em estado crítico.
Em vez disso, é muito melhor adotar uma abordagem ativa para gerenciar o uso da memória no ambiente do aplicativo. Você pode monitorar / proc / meminfo quanto a problemas e tomar as medidas apropriadas e acelerar a carga de trabalho antes que uma situação séria fique feia.
fonte
oom_adj
corretamente, poderá fazer com que seu sistema de desktop funcione um pouco como o Android, onde o sistema está sempre rodando contra o OOM killer (tecnicamente, existe um "killer com pouca memória" e é ajustado via/sys/module/lowmemorykiller
). A lógica é marcar continuamente processos em segundo plano não críticos como possíveis vítimas do assassino de OOM e procurar processos mortos e reiniciar lentamente os programas mortos necessários para evitar sobrecarregar o sistema. Apenas verifique se o processo que continua reiniciando outros processos está marcado fora dos limites do OOM killer.