Eu uso meu computador para programação científica. Ele possui uma boa 8GB
RAM e 12GB
espaço de troca. Freqüentemente, à medida que meus problemas aumentam, excedo toda a RAM disponível. Em vez de travar (o que seria preferido), parece que o Ubuntu começa a carregar tudo no swap, incluindo o Unity e quaisquer terminais abertos. Se eu não pegar um programa fugitivo a tempo, não há nada que eu possa fazer além de esperar - leva 4-5 minutos para mudar para um prompt de comando, por exemplo. Ctrl-Alt-F2
onde eu posso matar o processo ofensivo.
Como minha própria estupidez está fora do escopo deste fórum, como posso evitar que o Ubuntu falhe através do thrashing quando uso toda a memória disponível de um único programa ofensivo?
Experiência em casa *!
Abra um terminal, inicie python
e, se você tiver numpy
instalado, tente o seguinte:
>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
* Aviso: pode ter efeitos adversos, monitorar o processo via iotop
ou top
eliminá-lo a tempo. Caso contrário, vejo você após a reinicialização.
fonte
Os Cgroups devem permitir que você limite o uso da memória por processo.
https://en.wikipedia.org/wiki/Cgroups
http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt
A computação científica é notoriamente intensiva em memória; ao colocar o aplicativo em um grupo de proteção em sandbox, o restante dos processos não deve ser vítima, pois a pressão da memória será aliviada.
Como alternativa, uma VM pode ser usada como uma espécie de limite rígido, pois o aplicativo pode usar apenas a memória delegada na máquina virtual, às custas do desempenho, é claro. No entanto, uma VM é muito mais fácil de configurar para os não iniciados quando comparada à configuração e manutenção de um cgroup.
Decisões decisões :) Boa sorte!
fonte