Почему в Linux ограничено количество открытых файлов?

Почему в Linux ограничено количество открытых файлов?

Прямо сейчас я знаю, как:

  • найти лимит открытых файлов на процесс:ulimit -n
  • подсчитать все открытые файлы всеми процессами:lsof | wc -l
  • получить максимально допустимое количество открытых файлов:cat /proc/sys/fs/file-max

У меня вопрос: почему в Linux существует ограничение на количество открытых файлов?

решение1

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

Как пользователь root вы можете изменить максимальное количество открытых файлов для каждого процесса (через ulimit -n) и для каждой системы (например echo 800000 > /proc/sys/fs/file-max).

решение2

Обратите внимание, что это lsof | wc -lсуммирует множество дублирующихся записей (разветвленные процессы могут совместно использовать дескрипторы файлов и т. д.). Это число может быть намного больше, чем предел, установленный в /proc/sys/fs/file-max.

Чтобы получить текущее количество открытых файлов с точки зрения ядра Linux, выполните следующие действия:

cat /proc/sys/fs/file-nr

Пример: На этом сервере открыто 40096 из 65536 файлов, хотя lsof сообщает о гораздо большем числе:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504

решение3

Я думаю, что это во многом обусловлено историческими причинами.

Дескриптор файла Unix — это небольшое intзначение, возвращаемое такими функциями, как openи creat, и передаваемое в read, write, close, и так далее.

По крайней мере в ранних версиях Unix файловый дескриптор был просто индексом в массиве структур фиксированного размера для каждого процесса, где каждая структура содержала информацию об открытом файле. Если я правильно помню, некоторые ранние системы ограничивали размер этой таблицы примерно 20.

Более современные системы имеют более высокие пределы, но сохранили ту же общую схему, во многом по инерции.

Связанный контент