LimitNOFILE= в systemd: предел открытых файлов службы
Задаёт предел открытых файловых дескрипторов для процессов службы. Дескрипторы расходуются и на файлы, и на сетевые соединения.
Что делает
Главное, что нужно знать: файл /etc/security/limits.conf на службы не действует. Он применяется при входе пользователя в систему, а служба запускается менеджером напрямую. Предел задаётся только в unit-файле — отсюда частая ситуация «я поднял лимит, а он не поднялся».
Значение можно задать одним числом (тогда мягкий и жёсткий предел совпадут) или парой через двоеточие. Программа видит мягкий предел, поэтому задавать только жёсткий бессмысленно.
Где ставится. В секции [Service]. Общее значение по умолчанию — DefaultLimitNOFILE= в system.conf.
Значения
| Значение | Что происходит |
|---|---|
65535 | обычное значение для нагруженных служб. |
1024:524288 | мягкий и жёсткий пределы по отдельности. |
infinity | очень большое число; часть программ при таком значении стартует долго. |
Пример
Предел для веб-сервера под нагрузкой.
# systemctl edit nginx.service
[Service]
LimitNOFILE=65535
После правки нужны daemon-reload и перезапуск: на работающий процесс новый предел не действует.
Типичные ошибки
Настройки limits.conf на службы не влияют — только unit-файл.
Значение infinity на современных ядрах огромно: часть программ выделяет память по верхней границе и стартует медленно.
Перезагрузка настроек (reload) предел не меняет: нужен полный перезапуск службы.
Проверять надо не заданное, а действующее значение: cat /proc/PID/limits.
Связанные ошибки
- Too many open files в журнале службыСлужба исчерпала лимит файловых дескрипторов. Как правильно поднять LimitNOFILE и когда дело в утечке.
- status=205/LIMITS в systemdКод 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
- nginx: worker_connections are not enoughnginx под нагрузкой: не хватает соединений на рабочий процесс. Как считать worker_connections вместе с LimitNOFILE.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.exec(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)