SystemdDoctor
LimitMEMLOCK= [Service]

LimitMEMLOCK=: блокировка памяти от вытеснения

Задаёт, сколько памяти процессы службы могут заблокировать от вытеснения в подкачку. По умолчанию предел очень мал — порядка десятков килобайт.

Что делает

Блокировка нужна двум видам программ. Базам данных — чтобы важные структуры не уходили в подкачку и не портили время ответа. Программам с секретами — чтобы ключи не попали на диск в файл подкачки.

Для служб, которым это нужно, предел ставят в infinity. Elasticsearch, MongoDB и часть баз явно требуют такого значения и отказываются работать без него или предупреждают.

Где ставится. В секции [Service].

Значения

ЗначениеЧто происходит
infinityбез ограничения; обычный выбор для баз данных.
8Gявный предел с суффиксом.
64Kблизко к значению по умолчанию.

Пример

База данных с заблокированной памятью.

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
MemoryMax=8G

Предел памяти и блокировка не противоречат друг другу: первый ограничивает объём, второй запрещает вытеснение.

Типичные ошибки

Без повышения предела программа либо не запускается, либо молча работает без блокировки — второе хуже, потому что незаметно.

Блокировка памяти уменьшает объём, доступный остальным: значение infinity для всех служб подряд ставить не стоит.

В контейнере предел может быть ограничен извне, и unit-файл его не поднимет.

Связанные ошибки

  • status=205/LIMITS в systemdКод 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
  • Failed with result 'oom-kill'Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.

Рядом стоящие параметры

Где важен на практике

Источники

  • systemd.exec(5) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026