Каково максимальное ограничение открытых файлов в 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 есть способ ограничить количество открытых файлов, а также установить неограниченное количество открытых файлов, что решит проблему.