Насколько я понимаю, когда система близка к отсутствию свободной памяти, ядро должно начать уничтожать процессы, чтобы восстановить часть памяти. Но в моей системе этого не происходит вообще.
Предположим, что простой скрипт просто выделяет гораздо больше памяти, чем доступно в системе (например, массив с миллионами строк). Если я запускаю такой скрипт (как обычный пользователь), он просто получает всю память, пока система полностью не зависнет (работает только SysRQ REISUB).
Странная часть здесь в том, что когда компьютер зависает, светодиод жесткого диска включается и остается таким до перезагрузки компьютера, либо если у меня установлен раздел подкачки, либо нет!
Итак, мои вопросы:
- Это нормальное поведение? Странно, что приложение, выполненное как обычный пользователь, может просто так сбить систему ...
- Есть ли способ заставить Ubuntu просто автоматически убивать эти приложения, когда они получают слишком много (или больше) памяти?
Дополнительная информация
- Ubuntu 12.04.3
- Ядро 3.5.0-44
Оперативная память: ~ 3,7 ГБ из 4 ГБ (используется совместно с графической картой). *
$ 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). Но без свопа просто зависает компьютер. Он должен работать таким образом (убивать только при использовании свопа)?
tail -n+1 /proc/sys/vm/overcommit_*добавить вывод. Смотрите здесь также: Как мне настроить oom-killer