Назад | Перейти на главную страницу

Как рассчитывается оценка ядра OOM?

Посмотрел в Google и не нашел ничего, что объясняло бы, как proc/<pid>/oom_score рассчитывается. Зачем использовать эту оценку вместо того, чтобы просто использовать общий объем используемой памяти?

См. "Голдвин Родригес" Статья 2009 г. для реализации в то время Джонатан Корбет Статья 2010 г. я считаю, что это нынешнее поведение, а Джонатан Корбет Статья 2013 для идей о будущих изменениях.

Из статьи 2010 года:

В наборе патчей Дэвида старая эвристика badness () почти полностью исчезла. Вместо этого расчет превращается в простой вопрос о том, какой процент доступной памяти используется процессом. Если системе в целом не хватает памяти, то «доступная память» - это сумма всей оперативной памяти и пространства подкачки, доступного системе. Если вместо этого ситуация OOM вызвана исчерпанием памяти, разрешенной для данной группы процессоров / управления, то «доступная память» - это общий объем, выделенный этой группе управления. Аналогичный расчет выполняется, если превышены ограничения, налагаемые политикой памяти. В каждом случае считается, что использование памяти процессом складывается из его резидентного набора (количества страниц ОЗУ, которые он использует) и его использования подкачки.

В результате этого вычисления получается число, умноженное на десять; процесс, который использует каждый байт доступной ему памяти, получит оценку 1000, в то время как процесс, не использующий память вообще, получит оценку ноль. Существует очень мало эвристических настроек для этой оценки, но код все же вычитает небольшую сумму (30) из оценки процессов, принадлежащих root, на том основании, что они немного более ценны, чем процессы, принадлежащие пользователям.

Еще одна настройка, которая применяется - это добавление значения, хранящегося в переменной oom_score_adj каждого процесса, которую можно настроить с помощью / proc. Эта ручка позволяет настроить привлекательность каждого процесса для убийцы OOM в пространстве пользователя; установка на -1000 полностью отключит OOM-убийства, а установка на +1000 эквивалентна рисованию большой цели в связанном процессе.