Na minha máquina Debian VM com 512 MB de RAM e swap de 348 MB, o que acontecerá se eu abrir um arquivo de 1 GB em um editor e ficar sem memória?
Será que vai travar o sistema? Ou, se não, como o Linux lidará com isso?
Não seria prudente instalar o Swapspace; assim, se necessário, haverá troca suficiente de forma automática e dinâmica?
sudo apt-get install swapspace
memory
swap
out-of-memory
rubo77
fonte
fonte
Respostas:
Depende das configurações com as quais você está executando, em particular a confirmação excessiva de memória (
/proc/sys/vm/overcommit_memory
; vejaman 5 proc
para detalhes).Se a confirmação excessiva de memória estiver desativada, a tentativa do editor (e possivelmente outros programas que estão tentando ao mesmo tempo) alocar memória falhará. Eles obterão um resultado de falha da chamada do sistema. Cabe a cada programa lidar com isso, embora um resultado infelizmente comum seja o travamento do programa. O editor também pode, por exemplo, recusar-se a abrir o arquivo.
Se a confirmação excessiva de memória estiver ativada, a chamada do sistema que solicita memória pode ter êxito. Nesse caso, quando a memória é realmente acessada, o kernel notará sua falta de memória e interromperá um processo para recuperar a memória. Esse processo pode ou não ser o editor. A escolha é governada pelo
oom_score
(o resultado de várias heurísticas do kernel) eoom_score_adj
(configurada) de cada processo no sistema. Aqueles também estão nessa página de manual proc (5).fonte
Nesse caso, existe um enorme problema no Linux se você se aproximar da condição de falta de memória - você notará que todo o seu sistema fica totalmente sem resposta porque inicia muitas trocas. Até o cursor do mouse pode ficar tão "lento" que você não pode iniciar um terminal e interromper manualmente um processo comedor de memória incorreto. Isso ocorre devido ao grande número de operações em disco.
Para evitar essa situação, eu geralmente desabilito completamente a troca, para que o kernel do Linux seja sempre responsivo e, na pior das hipóteses, o assassino de falta de memória (OOM) acabará com algum processo. A lógica de qual processo é morto pelo OOM depende da versão do kernel.
Portanto, a resposta é não - não ative a alocação dinâmica de swap. Você enfrentará trava de máquina.
É fácil testá-lo com um programa que apenas aloca constantemente alguma memória em um loop. Salve este programa em um arquivo de texto
memeater.c
:Em seguida, compile-o:
e corra:
Experimente com swap, sem swap e com sua alocação dinâmica de swap.
Além disso, lembre-se de que, na maioria dos casos, essa condição de OOM ocorre devido a um erro no software (vazamento de memória) ou você fez algo errado como 'carregar este arquivo de 10 GB no editor' ou 'executar muitos redimensionamentos de arquivos gráficos em paralelo' e a conclusão: você precisa trocar ou não?
fonte