Um botão para colocar todos os processos em espera para o Linux?

2

Quando o Linux inicia a troca, você está basicamente fadado ao fracasso. Muito em breve o sistema não reagirá mais a nenhuma entrada, mas, felizmente, trocará até o final dos dias ...

Você pode pensar em um comando que mantenha todos os processos, assim (e enquanto), permitindo que você abra um shell limpo, onde você pode examinar a origem do problema e matar o processo que consumiu toda a memória? (Eu acho que isso não será fácil, porque como a memória é provavelmente completamente preenchida você precisaria trocar mais memória para juntar espaço para abrir um shell, por outro lado todos os outros processos de troca devem ser parados.)

Se você amarrou tal comando em uma tecla de atalho, talvez possa usá-lo como um botão de emergência, poupando muito tempo. Alguma idéia se isso é possível? Alguém já tentou algo assim antes? Se alguém pudesse perceber isso, seria um recurso interessante:)

    
por fuenfundachtzig 15.04.2010 / 16:11

5 respostas

6

Magic SysReq , como mencionado nas outras respostas, é realmente tudo o que você tem. Se você só tem acesso SSH, pode acionar o SysReq da seguinte forma:

# Enable Magic SysReq since most systems default this off
echo 1 > /proc/sys/kernel/sysrq
#call OOM Killer to try to free up memory
echo f > /proc/sysrq-trigger

Criando um script executável e executando isso assim que você perceber que a troca pode lhe dar uma chance. Desabilitar a troca também é uma opção se você tiver memória suficiente para lidar com picos de memória temporários ou se estiver OK ao matar programas aleatórios quando ficar sem memória.

Em uma nota relacionada, se você tiver um sistema remoto com carregamento acelerado e precisar desativá-lo, poderá usá-lo para forçar uma reinicialização sem encerrá-lo de forma limpa:

echo 1 > /proc/sys/kernel/sysrq
#Trigger BIOS reset
echo b > /proc/sysrq-trigger
    
por 15.04.2010 / 17:41
4

Uma solução (suboptimal!) é fornecer menos swap.

A ideia é que, quando você ergue as mãos em desespero, o assassino da OOM entra em ação.

Discussão

Minhas experiências usando o Linux na máquina de memória limitada sugerem que

Para uso interativo

  • Até 100 e poucos% de RAM em uso, a GUI faz
  • O uso de 100 a 150% da RAM funciona muito bem, embora você possa experimentar algum atraso na linha de comando
  • usar entre 150 e 175--200% da RAM é lento mas responsivo o suficiente para você interagir na linha de comando e matar inteligentemente coisas desnecessárias.
  • Acima disso, mesmo com paciência, é quase impossível consertá-lo manualmente.

Alguns casos especiais permitirão que você estenda esses limites. Processos de fundo grandes, mas raramente ativos, "ficarão" na memória, mas só ocasionalmente se tornarão ativos, por isso não contribuem muito para problemas de usabilidade.

De qualquer forma, o plano é ajustar a troca disponível para que, assim que a máquina esteja tão ocupada, você não possa matar coisas à mão, o assassino da OOM entra em ação.

Isso não é o ideal (apesar das múltiplas heurísticas disponíveis para o assassino da OOM), é difícil ter certeza de que ele escolherá "certo".

    
por 15.04.2010 / 16:50
2

Magic SysRq é a coisa mais próxima do seu botão que eu conheço ...

    
por 15.04.2010 / 16:50
1

Nunca tentei isso !, mas talvez:

killall -SIGSTOP <main commands>

Veja man killall para ver como você pode adaptar suas necessidades. Em geral, você pode querer executar o processo com ulimit para mantê-los sob controle e monitorar o uso da memória com algo como o Nagios (consulte as perguntas do gazillion 'What monitoring for ...' for alternatives).

    
por 15.04.2010 / 16:15
1

Você também pode tentar com nice -20 bash e obter um shell responsivo ...

    
por 16.04.2010 / 13:06