Каково максимальное ограничение открытых файлов в Linux?
В Linux, когда процесс открывает файл, ОС проверяет ограничение количества открытых файлов.
Если ограничение было 1024, что означает число?
Означает ли это
- количество файлов, открытых процессом
- количество файлов, открытых пользователем, которому принадлежит процесс
- количество всех открытых файлов в ОС в настоящее время?
Ответы
Ответ 1
Вы можете проверить пределы Soft и жесткие пределы вашей системы командой ulimit -a
.
- мягкие ограничения - это просто действующие ограничения.
- жесткие ограничения отмечают максимальное значение, которое невозможно превысить, установив мягкий предел.
Мягкие ограничения могут быть установлены любым пользователем, в то время как жесткие ограничения могут быть изменены только root. Ограничения - это свойство процесса. Они наследуются при создании дочернего процесса, поэтому системные ограничения должны быть установлены во время инициализации системы в сценариях инициализации, и пользовательские ограничения должны быть установлены во время входа пользователя, например, с помощью pam_limits
.
Часто устанавливаются значения по умолчанию при загрузке машины. Таким образом, даже если вы можете reset ваш ulimit в отдельной оболочке, вы можете обнаружить, что при перезагрузке он возвращается к предыдущему значению. Вы можете захотеть grep ваши сценарии загрузки для существования команд ulimit, если вы хотите изменить значение по умолчанию.
Если ограничение было 1024, значит, вы/процесс можете открыть максимум 1024 файла. если вы превысите этот предел, значит open
, pipe
и dup
не будут выполняться системные вызовы:
RLIMIT_NOFILE:
Задает значение, превышающее максимальный номер дескриптора файла, который может быть открыт этим процессом. Попытки (open(2)
, pipe(2)
, dup(2)
и т.д.), Чтобы превысить этот предел, дают ошибку EMFILE
.
Ответ 2
Это число дескрипторов открытых файлов для каждого процесса. Они могут ссылаться на один и тот же файл или на разные файлы.
Вы можете увидеть текущие пределы с помощью ulimit -a
в оболочке или программно с помощью getrlimit
. Общесистемные ограничения установлены в /etc/security/limits.conf
.
Объектная модель файловой системы в Linux:
file descriptor -> file description -> dentry -> inode
- дескриптор файла - это целочисленный номер, используемый приложением.
- Описание файла - это структура данных ядра, к которой относятся один или несколько дескрипторов файлов.
- dentry - это имя файла. Один файл может иметь много имен (жесткие ссылки).
- inode - это содержимое файла.
dup
создает новый файловый дескриптор в одно и то же описание файла.
open
создает новый файловый дескриптор и описание файла.
Ответ 3
Насколько я понимаю, это означает максимальное количество открытых файлов (дескрипторов) для пользователя.
Изменить:
Фактически, limits.conf устанавливает это значение для каждого пользователя:
* hard nofile 1024
что означает жесткий предел для всех пользователей (все как для каждого из них)
Или он может быть установлен следующим образом:
myuser hard nofile 1024
что означает ограничение 1024 для пользователя myuser
Ответ 4
Если это Linux, проверьте вывод:
ulimit -a
Он скажет, каково ограничение на количество открытых файлов в системе, потому что в linux есть способ ограничить количество открытых файлов, а также установить неограниченное количество открытых файлов, что решит проблему.