Максимальное количество файловых дескрипторов Debian

Максимальное количество файловых дескрипторов Debian

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-maxsysctlпоказывает, сколько дескрипторов файлов может быть выделенообщесистемный, в то время как 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.

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