VFS: file-max limit reached: в системе кончились описатели
Кроме предела на процесс есть общесистемный предел числа открытых файлов. При его исчерпании ломается всё сразу: новые соединения не принимаются, файлы не открываются, а сообщения об ошибках появляются у служб, которые ни в чём не виноваты.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Одна служба держит большинство описателей
Утечка описателей в одной программе исчерпывает общесистемный предел и ломает остальные службы.
-
Предел мал для нагрузки
На машинах с десятками тысяч соединений значение по умолчанию тесно.
-
Предел на процесс путают с общесистемным
Параметр 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Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Утечка описателей в одной программе исчерпывает общесистемный предел и ломает остальные службы.
- Как проверить
-
Найдите держателя описателей.
sudo lsof 2>/dev/null | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 cat /proc/sys/fs/file-nr
- Как исправить
- Исправьте утечку в виновной программе. Поднятие общего предела лишь отложит повторение.
- Почему происходит
- На машинах с десятками тысяч соединений значение по умолчанию тесно.
- Как проверить
-
Посмотрите текущее использование и предел.
cat /proc/sys/fs/file-nr sysctl fs.file-max
- Как исправить
- Поднимите общесистемный предел через настройку ядра и закрепите её в файле настроек, чтобы она сохранилась после перезагрузки.
- Почему происходит
- Параметр 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
Связанные ошибки
- status=205/LIMITS в systemd Код 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
- Too many open files в журнале службы Служба исчерпала лимит файловых дескрипторов. Как правильно поднять LimitNOFILE и когда дело в утечке.
- No buffer space available в журнале службы Ошибка 105: нет места в буферах ядра. Разбор для сети и таблиц соседей.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- TCP: out of memory -- consider tuning tcp_mem Ядру не хватает памяти под сетевые буферы: соединения рвутся, служба отвечает с перебоями.
- inotify: достигнут предел числа наблюдателей Служба не может следить за файлами: исчерпан лимит наблюдателей ядра. Как поднять и кто их расходует.
- kernel: audit: backlog limit exceeded Очередь аудита переполнена: часть событий теряется, система может замедляться.
- nf_conntrack: table full, dropping packet Соединения обрываются под нагрузкой: заполнена таблица отслеживания соединений ядра.
Где встречается чаще всего
Источники
- Документация ядра: настройки файловой подсистемы
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено программой, открывающей файлы без закрытия.