SystemdDoctor
служба не работает ядро ресурсы файлы

VFS: file-max limit reached: в системе кончились описатели

Кроме предела на процесс есть общесистемный предел числа открытых файлов. При его исчерпании ломается всё сразу: новые соединения не принимаются, файлы не открываются, а сообщения об ошибках появляются у служб, которые ни в чём не виноваты.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Одна служба держит большинство описателей

    Утечка описателей в одной программе исчерпывает общесистемный предел и ломает остальные службы.

  2. Предел мал для нагрузки

    На машинах с десятками тысяч соединений значение по умолчанию тесно.

  3. Предел на процесс путают с общесистемным

    Параметр unit-файла управляет пределом процесса. Он не помогает, когда исчерпан общий предел системы.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Использовано описателей, свободно, предел.

cat /proc/sys/fs/file-nr

Кто держит больше всех описателей.

sudo lsof 2>/dev/null | awk '{print $1}' | sort | uniq -c | sort -rn | head

Сообщения ядра об исчерпании предела.

journalctl -k -b --no-pager | grep -i "file-max" | tail

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Одна служба держит большинство описателей
Почему происходит
Утечка описателей в одной программе исчерпывает общесистемный предел и ломает остальные службы.
Как проверить
Найдите держателя описателей.
sudo lsof 2>/dev/null | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
cat /proc/sys/fs/file-nr
Как исправить
Исправьте утечку в виновной программе. Поднятие общего предела лишь отложит повторение.
2. Предел мал для нагрузки
Почему происходит
На машинах с десятками тысяч соединений значение по умолчанию тесно.
Как проверить
Посмотрите текущее использование и предел.
cat /proc/sys/fs/file-nr
sysctl fs.file-max
Как исправить
Поднимите общесистемный предел через настройку ядра и закрепите её в файле настроек, чтобы она сохранилась после перезагрузки.
3. Предел на процесс путают с общесистемным
Почему происходит
Параметр unit-файла управляет пределом процесса. Он не помогает, когда исчерпан общий предел системы.
Как проверить
Сравните оба предела.
systemctl show myapp.service -p LimitNOFILE
sysctl fs.file-max; cat /proc/sys/fs/file-nr
Как исправить
Разделяйте два предела: сначала смотрите на общесистемное использование, потом на предел процесса.

Пример вывода

Общесистемный предел исчерпан утечкой в одной службе. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

kernel: VFS: file-max limit 9223372036854775807 reached
nginx[1200]: 2026/09/15 16:44:10 [crit] 1200#0: accept4() failed (23: Too many open files in system)

$ cat /proc/sys/fs/file-nr
2097152	0	2097152

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

Где встречается чаще всего

Источники

  • Документация ядра: настройки файловой подсистемы документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено программой, открывающей файлы без закрытия.
    собственная проверка, systemd 255
    сверено 15 сентября 2026