Выбор ответа Senior Память и OOM обновлено

Защитить процесс от OOM killer

Вопрос

Как сделать, чтобы при нехватке памяти OOM killer в последнюю очередь трогал PostgreSQL?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Задать процессу отрицательный oomscoreadj (OOMScoreAdjust=-900). oomscoreadj от -1000 до 1000 сдвигает оценку процесса, -1000 полностью исключает его из выбора.

Варианты ответа

  1. Запустить PostgreSQL от root, OOM killer root не трогает
  2. Задать процессу отрицательный oom_score_adj (OOMScoreAdjust=-900)правильный ответ
  3. Отключить своп, чтобы OOM killer выбирал по размеру RSS
  4. Выставить vm.overcommit_memory=1, чтобы OOM killer вообще не срабатывал

Разбор

oom_score_adj от -1000 до 1000 сдвигает оценку процесса, -1000 полностью исключает его из выбора. В systemd это OOMScoreAdjust=. Root-процессы когда-то получали скидку, но сейчас это не защита. Отключение свопа приближает OOM, а overcommit_memory=1 разрешает выделять без проверок и тоже его не предотвращает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме