Це пояснюється тут , що ОАЯ-вбивця може бути налаштована з допомогою overcommit_memory
і що:
- 2 = відсутність перевиконання. Виділення не вдається, якщо запитати занадто багато.
- 0, 1 = перевиконання (евристично або завжди). Убийте якийсь процес на основі евристики, коли доступ до занадто багато пам'яті.
Тепер я можу повністю зрозуміти це, але чому немає варіанту (або чому це не за замовчуванням), щоб вбити той самий процес, який насправді намагається отримати занадто багато виділеної йому пам'яті?
Що робити, якщо критичний системний процес вимагає занадто багато пам'яті?
—
Лоуренс
В першу чергу - це може зробити це. Але найбільша проблема з цим питанням полягає в тому, що, швидше за все, якщо процес вимагає пам'яті, то він нещодавно виконується - або, іншими словами, це новий процес, який бере участь у дуже поточній обробці. Ви хочете, швидше за все, OOM дозволив вашому клієнту, який не був відкритий протягом 3-х днів, продовжувати витрачати системну пам'ять, або ви хочете, щоб YouTube фактично завантажив деякий час у цьому році? linuxatemyram.com
—
mikeserv
Це те, що по
—
Бармар
no overcommit
суті робить варіант. Якщо процес вимагає занадто багато пам'яті, він виходить з ладу. Якщо він перевірить на помилку, він зазвичай вбиває себе; якщо цього не відбудеться, він, ймовірно, отримає помилку сегментації, коли спробує знешкодити нульовий покажчик, який malloc()
повертається, і він вийде з ладу.
Зауважте, що 2 - це власне
—
hans_meine
no overcommit
режим, згідно з цитованими джерелами (наприклад, kernel.org/doc/Documentation/vm/overcommit-accounting ). Думаю, я відповідно відредагую ваше запитання.