Наскільки я розумію, коли система близько не має вільної пам'яті, ядро повинно починати вбивати процеси, щоб відновити деяку пам'ять. Але в моїй системі цього взагалі не відбувається.
Припустимо простий скрипт, який просто виділяє набагато більше пам’яті, ніж наявний в системі (наприклад, масив з мільйонами рядків). Якщо я запускаю такий сценарій (як звичайний користувач), він просто отримує всю пам'ять, поки система повністю не застигне (працює тільки SISRQ 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
). Але без своп просто заморожує комп'ютер. Це має працювати так (вбивати лише при використанні swap)?
tail -n+1 /proc/sys/vm/overcommit_*
додати результат. Дивіться також тут: Як налаштувати oom-killer