Подивився на Google і не знайшов нічого, що пояснило б, як proc/<pid>/oom_score
обчислюється оцінка . Навіщо використовувати цей бал замість того, щоб просто використовувати загальну використану пам'ять?
Подивився на Google і не знайшов нічого, що пояснило б, як proc/<pid>/oom_score
обчислюється оцінка . Навіщо використовувати цей бал замість того, щоб просто використовувати загальну використану пам'ять?
Відповіді:
Дивіться статтю Голдуїна Родрігеса 2009 року щодо впровадження в той час, статтю Джонатана Корбета 2010 року, на що я вважаю, що це поведінка в даний час, і статтю Джонатана Корбета в 2013 році щодо ідей щодо майбутніх змін.
З статті 2010 року:
У наборі патчів Девіда стара евристика badness () майже повністю зникла. Натомість обчислення перетворюється на просте запитання, який відсоток наявної пам'яті використовується процесом. Якщо системі в цілому не вистачає пам’яті, то «наявна пам’ять» - це сума всієї оперативної пам’яті та місця обміну, доступного для системи. Якщо натомість ситуація з OOM викликана вичерпанням пам’яті, дозволеної даній групі cpuset / control, то «наявна пам’ять» - це загальна кількість, виділена цій контрольній групі. Аналогічний розрахунок проводиться, якщо перевищені межі, накладені політикою пам'яті. У кожному випадку використання пам'яті процесу вважається сумою його резидентного набору (кількість сторінок ОЗУ, яку він використовує) та його використання.
Цей підрахунок отримує в результаті число відсотків у десять разів; процес, який використовує кожен доступний йому байт пам'яті, матиме 1000 балів, тоді як процес, що не використовує пам'яті, отримає нульовий бал. Євристичних перетворень до цього показника дуже мало, але код все ж віднімає невелику кількість (30) від кількості кореневих процесів, враховуючи, що вони дещо цінніші, ніж процеси, що належать користувачеві.
Ще одне налаштування, яке застосовується, полягає в тому, щоб додати значення, збережене в змінній oom_score_adj кожного процесу, яке можна регулювати через / proc. Цей регулятор дозволяє регулювати привабливість кожного процесу для вбивці OOM у користувальницькому просторі; встановлення його до -1000 призведе до відключення вбивств OOM повністю, тоді як встановлення значення +1000 є еквівалентом малювання великої цілі в пов'язаному процесі.