OOMScoreAdjust= и OOMPolicy= в systemd
OOMScoreAdjust= меняет привлекательность процессов службы для механизма освобождения памяти: от −1000 (убивать последним) до 1000 (убивать первым). OOMPolicy= определяет, что делать со службой, когда её процесс убит.
Что делает
Первый параметр — способ расставить приоритеты: базе данных и системным службам ставят отрицательные значения, необязательным фоновым задачам — положительные. Отрицательные значения требуют прав, поэтому в службах пользователя они недоступны.
Второй параметр решает вопрос последствий. По умолчанию (stop) убийство любого процесса службы останавливает её целиком. Значение continue оставляет службу работать: это уместно для служб с пулом рабочих процессов, где потеря одного не фатальна.
Где ставится. В секции [Service].
Значения
| Значение | Что происходит |
|---|---|
OOMScoreAdjust=-500 | убивать в числе последних; требует прав. |
OOMScoreAdjust=800 | убивать в первую очередь: для необязательных задач. |
OOMPolicy=stop | по умолчанию: остановить службу. |
OOMPolicy=continue | продолжить работу, потеряв убитый процесс. |
Пример
База данных, которую нежелательно убивать первой.
[Service]
OOMScoreAdjust=-500
OOMPolicy=stop
MemoryMax=4G
Это не защита от нехватки памяти, а расстановка приоритетов. Настоящее решение — предел памяти и разбор потребления.
Типичные ошибки
Отрицательные значения требуют прав: в службе без них получите код 206/OOM_ADJUST.
Параметр не защищает от убийства при упоре в собственный MemoryMax=: там жертва определена заранее.
OOMPolicy=continue может оставить службу в неработоспособном состоянии — «работает, но без части процессов».
Связанные ошибки
- status=206/OOM_ADJUST в systemdКод 206/OOM_ADJUST: не удалось изменить оценку OOM для процесса службы. Обычно мешают права или значение вне диапазона.
- Failed with result 'oom-kill'Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- signal=KILL (status=9/KILL) в systemdПроцесс службы убит сигналом KILL. Кто мог его послать: OOM-killer, таймаут остановки systemd, администратор.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.exec(5)
- systemd.service(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)