Linux sem swap ainda começa a se debater

Linux sem swap ainda começa a se debater

Debian 9.4, Linux 4.9

Às vezes compilo algo que dificilmente cabe na RAM, ou um processo estranho de repente começa a consumir memória além do que está disponível. Quando o processo ultrapassa a RAM disponível, o Linux começa a debater o disco, mesmo que eu tenha zero swap ativado (nenhuma troca foi uma tentativa de evitar isso). Eu acho que ele começa a descartar e recarregar coisas como as mmappartes ped dos binários que estão em execução no momento.

Nesse ponto, minha sessão X rapidamente deixa de responder e tudo que posso fazer é esperar dezenas de minutos até que toda a sessão X seja encerrada e eu possa fazer login novamente.

Tentei procurar soluções, mas nada parece funcionar. O OOM killer não captura esse processo e vm.overcommit_memory=2não consigo nem fazer login no GDM e no Gnome.

Há algum caminhodizer ao Linux para não trocar? Dessa forma, eu teria pelo menos uma chance de que o processo rouge fosse eliminado por um failed malloc, e mesmo que não, pelo menos não precisaria esperar enquanto olhava para uma máquina que não responde.

Ou alguma outra dica de como gerenciar esse cenário?

Responder1

Se você estiver compilando fontes que requerem quase toda a RAM disponível, se não mais, provavelmente a única solução com bom desempenho é adicionar RAM real. Dito isto, você pode tentar adicionar uma quantidade muito grande de swap (digamos 2x ou 3x a RAM) e definir /proc/sys/vm/swappinessum valor baixo, como 1 (observe que com o kernel 3.5+ configurá-lo para 0 desativa totalmente o swap), de modo que o swap é usado apenas se for efetivamente necessário. Isso deve minimizar a surra.

Responder2

Não entendo como as pessoas podem recomendar adicionar mais RAM ou mais espaço de troca. Um aplicativo com comportamento inadequado pode consumir tudo e reproduzir o problema.

Esse tipo de congelamento é um bug arquitetônico sério no kernel do Linux. A única maneira de se recuperar quando o congelamento ocorrer é forçar o OOM com uma tecla mágica (alt+sysrq+f). O log do kernel lhe dirá mais tarde o que foi eliminado e por quê.

Vários projetos estão tentando evitar esse congelamento no espaço do usuário. Veja earlyOOM, por exemplo.

informação relacionada