Верхний предел файлового дескриптора в Linux

каков верхний предел файлового дескриптора, который может использоваться в любой системе Linux (в частности, ubuntu 10.04)?

Я использую Ubuntu 10.04 (64-разрядная версия), а моя архитектура процессора для сервера - x86_64, а для клиента - i686. Прямо сейчас я увеличил свой fd-limit до 400000.

  • Что может быть возможным побочным эффектом использования большого нет. дескрипторов файлов?
  • Как я могу узнать об отсутствии. файловый дескриптор, который используется каким-либо процессом?

Thnx

Ответ 1

Вместо этого вы хотите посмотреть /proc/sys/fs/file -max.

Из недавнего linux/Documentation/sysctl/fs.txt:

file-max и file-nr:

Ядро распределяет файловые дескрипторы динамически, но пока это не освободите их снова.

Значение в файле-max означает максимальное количество файлов, которые ядро Linux будет выделять. Когда вы получаете много сообщений об ошибках о запуске файловых дескрипторов, вы можете увеличить это предел.

Исторически три значения в файле-nr обозначали число выделенные файловые дескрипторы, количество выделенного, но неиспользуемого файла ручками и максимальным количеством дескрипторов файлов. Linux 2.6 всегда сообщает 0 как количество бесплатных дескрипторов файлов - это не ошибка, это просто означает, что количество выделенных файловых дескрипторов точно соответствует количеству используемых дескрипторов файлов.

Сообщается о попытках выделить больше дескрипторов файлов, чем файл-макс с printk, найдите "VFS: достигнут максимальный размер файла".

Ядро 2.6 использует эмпирическое правило для установки file-max в зависимости от объема памяти в системе. Фрагмент из fs/file_table.c в ядре 2.6:

/*
 * One file with associated inode and dcache is very roughly 1K.
 * Per default don't use more than 10% of our memory for files. 
 */ 

n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);

files_stat.max_files - это значение fs.file-max. Это заканчивается примерно 100 для каждых 1 МБ бара (10%)

Ответ 2

Каждый дескриптор файла занимает некоторую память ядра, поэтому в какой-то момент вы его исчерпаете. При этом до 100 тысяч дескрипторов файлов не имеют ничего общего с развертываниями серверов, в которых используются серверные архитектуры на основе событий (epoll on Linux). Так что 400k не совсем необоснованно.

Для вторых вопросов см. директории/proc/PID/fd/or/proc/PID/fdinfo.