Eu tenho um eeePC 900a: ele tem um flash de 8 GB como disco e apenas 1 GB de RAM. A distribuição Linux instalada nele é ArchLinux.
Quando o sistema fica sem memória, ele fica extremamente sem resposta: leva alguns segundos / minutos para fazer coisas como mudar para TTY1 ou até mover o ponteiro do mouse. Às vezes, parece que o sistema congela: três nossos atrás deixei em paz e nada mudou até agora.
Prefiro evitar criar uma partição / arquivo de troca neste eeePC, já que o disco já é muito pequeno e também porque as muitas gravações no espaço de troca reduziriam muito a vida útil do cartão flash. Além disso, acho que um arquivo / partição de swap apenas moveria o problema, em vez de resolvê-lo definitivamente.
O kernel não deveria matar alguns aplicativos aleatórios quando ficar sem memória? Por que falha (ou leva anos) em fazer isso?
Há alguns meses / anos, eu já tentei aprofundar isso, mas não consegui encontrar nada que realmente funcionasse ...
while(true){ if( $FREE_MEMORY<10MB ){ kill -9 $RANDOM_PID; } }
. Isso definitivamente resolveria o meu problema. Mas espere, o kernel não deveria fazer isso (e de uma maneira muito melhor que o meu script)? Por que não está fazendo o seu trabalho?Respostas:
É possível chamar o OOM-killer (sem memória) diretamente pela combinação do teclado:
SysRq-F
A tecla SysRq geralmente é combinada na tecla PrtSc nos teclados.
OOM-killer mata algum processo (-es) e o sistema se torna responsivo novamente.
Thx Raman, para obter conselhos sobre esse recurso nos comentários acima.
PS: Isso me ajudou muito. Concordo com a opinião de que este é o conselho mais útil sobre esse problema, se causado pelo Chrome ou qualquer outro software ganancioso de memória. Mas você deve ter em mente que o OOM-killer pode matar algum processo realmente importante, use-o com cuidado.
fonte
PrtScn|SysRq
. Mas pressionarSysRq - F
apenas obtém uma captura de telaO estado natural das coisas é que os dados do aplicativo estão na RAM e os arquivos estão no disco.
O estado ideal das coisas, em termos de desempenho, é que os dados em uso frequente estão na RAM e os dados que não são necessários no momento estão no disco.
Em um sistema normal, o kernel faz duas coisas para tentar alcançar esse ideal:
Em um sistema típico, uma parte significativa da RAM é dedicada ao cache e aos buffers (50% é uma figura típica). Como a RAM é um recurso finito, isso pode exigir o deslocamento de alguns dados do aplicativo para troca (a troca é necessária apenas se houver uma maneira melhor de usar a RAM).
Em um sistema sem troca, há um momento em que os dados do aplicativo estão usando quase toda a RAM e, portanto, quase não resta espaço para o cache. É provável que o sistema esteja lento. O kernel não começará a matar aplicativos até que realmente precise. Enquanto os aplicativos preencherem apenas 99% da memória disponível, o sistema continuará funcionando, mas muito lentamente porque os dados dos arquivos precisam ser carregados e recarregados do disco o tempo todo. Com os mesmos aplicativos em execução, o sistema seria mais rápido com a troca nesse ponto.
Para saber mais sobre esse assunto, consulte esta discussão sobre lkml e esta postagem no blog .
Não conheço uma maneira direta de dizer ao kernel para reservar uma quantidade mínima de RAM para o cache do disco. Você pode configurar uma pequena parte da sua RAM como espaço de troca , talvez até compactado . Há relatórios de sucesso nessa frente , embora eu não garanta no seu caso particular.
fonte
ld
, seu pedaço de lixo), ele permanece travado por quase um minuto, acordando apenas o suficiente para me deixar mover o mouse incrivelmente lento por um segundo ou dois a cada vários segundos. O manuseio de OOM do Linux é uma porcaria completa. Se tiver sorte, o assassino da OOM mata o processo certo sem estragar completamente o ambiente da área de trabalho. E eu sou um grande fã do Linux. É muito pior com a paginação ativada. A paginação do Linux é uma piada.Este é um bug conhecido desde 2007 - consulte Congelamento do sistema com alto uso de memória .
Nessa situação, o Windows exibe uma caixa de diálogo avisando o usuário para fechar um ou mais aplicativos.
fonte
Recentemente eu encontrei uma solução para o meu problema.
Como o killer do Linux OOM não é capaz de fazer seu trabalho corretamente, comecei a usar o OOM Killer do espaço do usuário: earlyoom . Está escrito em C, bastante configurável e está funcionando como um encanto para mim.
Também ouvi falar de algumas alternativas, como o OOMD do Facebook , desenvolvidas para rodar em seus servidores, mas ainda não tentei.
fonte