Debian Lenny. Для каждого пользователя, включая root:
# cat /proc/sys/fs/file-max
262144
# sysctl fs.file-max
fs.file-max = 262144
# ulimit -Hn
1024
# ulimit -Sn
1024
В файле /etc/security/limits.conf
нет незакомментированных строк.
Откуда он берет 1024?
решение1
Thefs.file-max
sysctlпоказывает, сколько дескрипторов файлов может быть выделенообщесистемный, в то время как ulimit
ограничения ресурсов устанавливаются на каждый процесс (или на каждый UID). Первый вариант описан вDocumentation/sysctl/fs.txt:90
:
максимальный размер файла и номер файла: Значение file-max обозначает максимальное количество файлов. дескрипторы, которые ядро Linux выделит. Когда вы получаете много сообщений об ошибках, связанных с исчерпанием дескрипторов файлов, вы можете хотите увеличить этот лимит.
Ограничение в 1024 файла нигде явно не установлено; оно жестко закодировано в ядре как значение по умолчанию для pid 1, по адресуinclude/asm-generic/resource.h:81
:
/* * значения rlimit по умолчанию для задачи init во время загрузки: */ #define INIT_RLIMITS \ { \ ... [RLIMIT_NOFILE] = {INR_OPEN_CUR, INR_OPEN_MAX}, \ ... }
какие ссылки INR_OPEN_CUR
и INR_OPEN_MAX
изinclude/linux/fs.h:26
:
#define INR_OPEN_CUR 1024 /* Начальная настройка для nfile rlimits */ #define INR_OPEN_MAX 4096 /* Жесткий предел для nfile rlimits */
Другие процессы просто наследуют ограничение от init
(или от pid 1).
Почему /proc/1/limits
в Debian отчет 1024 как мягкийи жесткийОграничение nfile? Не знаю: ни исходники sysvinit, ни патчи ядра Debian его не меняют. Возможно, это скрипты initramfs. (Я использую Arch, у которого по умолчанию 1024/4096.)
решение2
По вопросу, поднятому @grawity, этот коммит ядра может объяснить:
коммит 0ac1ee0bfec2a4ad118f907ce586d0dfd8db7641 Автор: Тим Гарднер Дата: Вт Май 24 17:13:05 2011 -0700 ulimit: увеличить жесткое ограничение по умолчанию для количества файлов до 4096
По крайней мере в RHEL5.4 это 1024/1024, а в RHEL6.2 это 1024/4096.