Per quello che ho capito, quando il sistema è vicino a non avere memoria libera, il kernel dovrebbe iniziare a terminare i processi per recuperare memoria. Ma nel mio sistema questo non accade affatto.
Supponiamo uno script semplice che alloca solo molta più memoria di quella disponibile nel sistema (un array con milioni di stringhe, per esempio). Se eseguo uno script come questo (come un normale utente), ottiene solo tutta la memoria fino a quando il sistema non si blocca completamente (funziona solo SysRQ REISUB).
La parte strana qui è che quando il computer si blocca, il led del disco rigido si accende e rimane così fino al riavvio del computer, sia se ho una partizione di swap montata o no!
Quindi le mie domande sono:
- Questo comportamento è normale? È strano che un'applicazione eseguita come un normale utente possa semplicemente arrestare il sistema in questo modo ...
- C'è un modo in cui posso fare in modo che Ubuntu uccida automaticamente quelle applicazioni quando ottengono troppa (o più) memoria?
Informazioni aggiuntive
- Ubuntu 12.04.3
- Kernel 3.5.0-44
RAM: ~ 3,7 GB da 4 GB (condivisa con la scheda grafica). *
$ 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). Ma senza scambio, congela semplicemente il computer. Dovrebbe funzionare in questo modo (uccidere solo quando si usa lo swap)?
tail -n+1 /proc/sys/vm/overcommit_*aggiungere l'output. Vedi anche qui: Come configuro oom-killer