Посмотрел в Google и не смог найти ничего, что объясняло бы, как proc/<pid>/oom_score
рассчитывается счет . Зачем использовать этот счет вместо того, чтобы просто использовать общий объем используемой памяти?
Посмотрел в Google и не смог найти ничего, что объясняло бы, как proc/<pid>/oom_score
рассчитывается счет . Зачем использовать этот счет вместо того, чтобы просто использовать общий объем используемой памяти?
Ответы:
См. Статью Goldwyn Rodrigues 2009 года о реализации в то время, статью Jonathan Corbet 2010 года о том, что я считаю текущим поведением, и статью Jonathan Corbet 2013 года для идей о будущих изменениях.
Из статьи 2010 года:
В наборе патчей Дэвида старая эвристика badness () почти полностью исчезла. Вместо этого вычисление превращается в простой вопрос о том, какой процент доступной памяти используется процессом. Если системе в целом не хватает памяти, то «доступная память» - это сумма всей оперативной памяти и пространства подкачки, доступных системе. Если вместо этого ситуация OOM вызвана исчерпанием памяти, разрешенной для данной группы процессоров / управления, то «доступная память» - это общий объем, выделенный этой группе управления. Аналогичный расчет выполняется, если превышены ограничения, налагаемые политикой памяти. В каждом случае использование памяти процессом считается суммой его резидентного набора (количества страниц ОЗУ, которое он использует) и использования его подкачки.
В результате этого вычисления получается число, умноженное на десять раз; процесс, использующий каждый байт доступной ему памяти, будет иметь оценку 1000, в то время как процесс, вообще не использующий память, получит нулевую оценку. Существует очень мало эвристических настроек для этой оценки, но код все же вычитает небольшое количество (30) из оценки процессов, принадлежащих корню, на том основании, что они немного более ценны, чем процессы, принадлежащие пользователю.
Еще одна хитрость, которая применяется, заключается в добавлении значения, хранящегося в переменной oom_score_adj каждого процесса, который можно настроить с помощью / proc. Эта ручка позволяет регулировать привлекательность каждого процесса для убийцы OOM в пространстве пользователя; установка его в -1000 полностью отключит OOM-убийства, в то время как установка в +1000 является эквивалентом рисования большой цели в связанном процессе.