Às vezes, trabalho com grandes quantidades de dados que quero manter na memória para processamento. Às vezes, calculo mal a quantidade de memória que meu programa produzirá ou um depurador multiplica o uso de memória por um fator que excede minha memória disponível.
Sempre que inicio um processo que consome muita memória, é o que eu esperaria de um sistema operacional sadio: tente consumir toda a memória livre e peça a outros processos não essenciais que renunciem à memória de que não precisam; escreva para trocar.
Aqui está o que o Ubuntu faz por mim: coma toda a memória livre, peça ao sistema operacional que troque todos os serviços essenciais (sessão gnome, terminal, teclado), congele e espere que eu puxe o plugue.
Duas questões:
- Como um sistema operacional pode assumir que algo pode ser tão importante que não há problema em parar de ouvir as informações do usuário?
- Como posso dizer ao Ubuntu para nunca trocar serviços essenciais e sempre reagir à entrada do usuário, mesmo que algum processo estúpido tente consumir mais recursos do que o sistema fornece.
swapon
para descobrir)? Cheers, Alswappiness
configuração para 10, ou seja:vm.swappiness = 10
em /etc/sysctl.conf. Pesquise aqui swappiness para obter mais informações sobre ele. 2) Se a troca não ajudar ... Mesmo que você não queira ... aumente o tamanho do seu arquivo de troca para 1,5x16G e veja se isso ajuda. Mantenha-me informado. Cheers, Alvm.swappiness=10
precisa ser ADICIONADO ao sysctl.conf. Uma pessoa experiente pode até usar o comando sysctl em tempo real, para definir vm.swappiness = 10, sem editar o arquivo sysctl.conf. Saúde, esperamos que o OP responda.Respostas:
Ainda não tenho uma solução para o problema, mas posso oferecer duas soluções alternativas que podem ser do interesse de outras pessoas:
1) earlyoom
Esse é um serviço que observa o uso da memória e mata o processo que consome mais memória quando um certo limite é atingido (consulte também esta e esta pergunta sobre o assassino de OOM no kernel do linux)
Testei-o com um processo de demonstração que solicita indefinidamente memória em pequenos pedaços. Aqui está minha primeira impressão: quando inicio o processo não autorizado, ele consome rapidamente toda a minha RAM. Em seguida, a troca começa e o sistema fica sem resposta. Alguns segundos depois, o sistema está novamente online. O log do earlyoom mostra que eliminou o processo de consumo de memória após o uso de memória e troca atingir 90%.
Ainda existe um atraso irritante quando a troca é iniciada e após a interrupção do processo, algumas partes de outros processos geralmente permanecem em troca até serem solicitadas, mas é um começo.
2) basta desativar a troca
Sei que esse é um tópico polêmico , mas, para o propósito de sistemas de desktop e, especialmente, de máquinas de desenvolvimento, nas quais, de tempos em tempos, um processo tenta consumir toda a memória, faz sentido: sem troca, o assassino do OOM simplesmente funciona como pretendido. Quando você fica sem memória, ele encontra o melhor processo para matar e se livra dele. Sem atraso, sem atraso.
Você pode desativar a troca da sessão atual
sudo swapoff -a
ou tornar a alteração permanente .A solução adequada para o problema seria, obviamente, que o sistema permaneça responsivo quando a memória principal se esgote e comece a trocar a memória como se não houvesse amanhã, mas isso não parece estar acontecendo tão cedo.
fonte
Tente uma de duas coisas:
1) altere a configuração de swappiness da configuração padrão de 60 para 10, ou seja: adicione vm.swappiness = 10 ao /etc/sysctl.conf (no terminal, tipo
sudo gedit /etc/sysctl.conf
) e reinicie o sistema. Pesquise aqui swappiness para obter mais informações sobre ele.2) Se a troca não ajudar ... mesmo que você não queira ... aumente o tamanho do seu arquivo de troca para 1,5x16G e veja se isso ajuda.
Mantenha-me informado. Cheers, Al
fonte
top
para eliminar o problema da memória). Depois de um minuto ou mais, o processo é interrompido. Não é perfeito, mas estamos nos aproximando.Eu resolvi um problema semelhante. Não sei se minha experiência talvez seja adequada para você ...
Recentemente, publiquei um guia sobre como instalar o Linux em dispositivos LVM de loopback inicializando a partir do USB (portanto, sem precisar instalar o grub no disco interno, deixando-o como original). Aqui está o guia: https://github.com/DareDevil73/linux-on-loopback-usb .
Então caí no problema de congelamento com alta carga de memória e observei um uso anormal do espaço de troca (toda a RAM consumida e uso de troca próximo de zero). Obviamente, a partição de troca LVM foi montada e funcionando corretamente, mas não sei por que o kernel não a usou como esperado.
Eu tentei uma solução alternativa. Eu criei um arquivo de loopback de troca (não o LVM) e o congelamento se foi. Agora, o arquivo de troca é usado como seria e o sistema operacional nunca congela!
Consulte https://github.com/DareDevil73/linux-on-loopback-usb#known-issues para obter informações mais detalhadas.
fonte