Sim, esta é uma questão ampla, mas eu diria que é bastante válida. Às vezes, programas e scripts demoram muito ou usam muita memória e realmente começam a atrasar meu sistema. Bem. Às vezes o sistema desacelera tanto que mal posso mostrar meu mouse para o terminal e spam Ctrl + C . Isso me deixa perplexo sobre por que um sistema operacional não fornece prioridade de agendamento para permitir que o usuário use o mouse, o teclado e mate as coisas. Já viu isso?
> ./program
^C^C^C^C^C^C^C^C^C^C^C^Z^Z^Z^C^C^C^C^C^Clsdhafjkasdf
Agora, Ctrl + C não é tão severo quanto alguns outros (pode ser tratado pelo aplicativo e até mesmo ignorado, mas não é o caso aqui). Ctrl + Z funcionaria muito bem, pois eu poderia kill -9 %1
depois, mas também não funciona.
Outro método pode ser pular para um console virtual Ctrl + Alt + F2 , efetuar o login e eliminar o aplicativo problemático, mas como o sistema está ocupado isso não funciona e eu recebo uma tela preta. Da mesma forma eu não posso abrir novos terminais (a janela aparece, mas não me deixa cair em um shell). Outros terminais que estão abertos podem não responder ou executar comandos.
Eu suspeito que uma razão pela qual o sistema é tão inoperável é que o programa ofensivo está pressionando o swap e empurrando os aplicativos principais da memória principal. Nem mesmo o comando mais simples para me dar um prompt bash ou executar o kill pode obter um ciclo em edgeways. Não tenho provas disso porque não posso executar top
quando isso acontece. Existe alguma opção para melhorar as chances de o Ctrl + C funcionar? original? . Talvez algo ao longo das linhas de aumentar X e prioridade de terminal ou automaticamente matar programas que usam uma grande parte da memória ou começar a trocar muito?
Existe algum outro linux-fu que eu possa usar para recuperar o controle quando isso acontece (por exemplo, comandos SysRq )?
Atualização: Depois de mais alguns testes, tenho certeza que os aplicativos usam muita memória e acessam o swap. Mesmo depois de matar o aplicativo em questão, outros demoram muito para começar a ser responsivos, como se tivessem sido retirados da memória principal. Eu realmente gostaria de alguma maneira de limitar automaticamente os programas de uso de memória alta para a memória principal . Se isso acontecer, será muito lento, então qual é o objetivo de continuar.
OBSERVAÇÃO: Não estou atrás de uma solução para um aplicativo específico e não sei antecipadamente quando alguma operação vai mastigar a memória. Eu quero resolver esse tipo de sistema de lentidão. Ou seja muitos programas causam isso. AFAIK Eu não mexi com a configuração do sistema e é uma instalação bastante padrão do fedora. Não estou surpreso com essas lentidões, mas quero mais controle.
Gostaria de manter meu gerenciador de janelas em execução e esses são meus últimos recursos que espero evitar. Eu geralmente só preciso disso se a minha GPU estiver presa em um loop e bloqueando o X. Se ativado , Ctrl + Alt + backspace é um atalho prático para matar X e todos os seus aplicativos, levando você de volta para entrar. Um comando mais potente, novamente se ativado , é Alt + SysRq + K . Se isso não funcionar, a hora do botão liga / desliga.
Alt + SysRq + F (obrigado, @Hastur), que mata os processos de monopolizar a memória é bastante destrutivo, mas pode ajudar como último recorrer.
Atualização: Não inteiramente certo de todas as conseqüências aqui, mas a sugestão de ulimit
do @ Xen2050 parece resolver muitos problemas ...
TOTAL_PHYSICAL_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print $2}')
ulimit -Sv $(( $TOTAL_PHYSICAL_MEMORY * 4 / 8))
Vou deixar isso no meu bashrc e ver como as coisas correm.
Atualização: as coisas parecem boas, exceto que eu acho que alguns aplicativos compartilham grandes bibliotecas e mapeiam arquivos grandes. Mesmo que eles consumam mal qualquer memória real e não é provável que ele acesse swap com freqüência. Não parece haver um número baixo o suficiente para matar aplicativos pesados de troca de trocas, mas deixar os regulares (como 4.6gb VIRT amarok
) rodando.
Relacionados: link , mas ainda a questão de limitar os aplicativos que começam a trocar muito.
Esta é exatamente a melhor solução que eu vejo depois: É possível fazer o interventor assassino da OOM mais cedo?