Ответ 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%)