Pelo que entendi, quando o sistema está perto de não ter memória livre, o kernel deve começar a matar processos para recuperar alguma memória. Mas no meu sistema isso não acontece.
Suponha um script simples que aloque muito mais memória do que a disponível no sistema (uma matriz com milhões de strings, por exemplo). Se eu executar um script como este (como um usuário normal), ele receberá toda a memória até o sistema congelar completamente (apenas o SysRQ REISUB funciona).
A parte estranha aqui é que, quando o computador congela, o led do disco rígido liga e permanece assim até a reinicialização do computador, se eu tiver uma partição swap montada ou não!
Então, minhas perguntas são:
- Esse comportamento é normal? É estranho que um aplicativo executado como usuário normal possa travar o sistema dessa maneira ...
- Existe alguma maneira de fazer o Ubuntu simplesmente matar automaticamente esses aplicativos quando eles recebem muita (ou mais) memória?
Informação adicional
- Ubuntu 12.04.3
- Kernel 3.5.0-44
RAM: ~ 3.7GB a partir de 4GB (compartilhado com a placa gráfica). *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Mas, sem troca, apenas congela o computador. É suposto funcionar desta maneira (apenas matar quando se usa swap)?
tail -n+1 /proc/sys/vm/overcommit_*
e adicione a saída. Veja aqui também: Como configurar oom-killer