Назад | Перейти на главную страницу

Linux - Открытое наследование файлов

Для тестирования я изменил свой глобальный лимит открытых файлов на 3000:

#sysctl -w fs.file-max=3000
fs.file-max = 3000

#cat /proc/sys/fs/file-nr
2016    0       3000

Я создал несколько файлов:

 i=1; while [ "$i" -le 1000  ]; do : >> "$i"; i=$(($i + 1)); done

Я держал их открытыми:

i=1; while [ "$i" -le 1000  ]; do less  "$i" & ; i=$(($i + 1)); done

Я видел только что созданный хаос:

ksh: /bin/less: cannot execute [Too many open files in system]

Я знаю, что достиг предела ...

# cat  /proc/sys/fs/file-nr
3008    0       3000

Если я сейчас увеличу лимит открытых файлов (чтобы я мог использовать ssh с другой консолью), и если я проверю одно из последних меньших, которые я создал после установки максимального количества открытых файлов на 3000, я увижу:

# cat /proc/28282/limits  | grep 'Max open files'
Limit                     Soft Limit           Hard Limit       Units
Max open files            1024                 16384            files

«Жесткий предел» по-прежнему установлен на высоком уровне, хотя 3000 не упоминаются. Таким образом, мы достигли системного ограничения, а не ограничения на процесс.

Почему бы не дать вновь созданному процессу наследовать 3000 и 16384?

Я вошел в систему в новом терминале с новой оболочкой, так почему бы моей оболочке не сказать 3000 и не передать это меньше?

Это ядро ​​2.6.32

По этой ссылке Ограничения файлового дескриптора Ulimit не применяются для определенного процесса

Я цитирую:

"/etc/security/limits.conf является частью pam_limits, поэтому ограничения, установленные в этом файле, читаются модулем pam_limits во время сеансов входа в систему. Сеанс входа в систему может быть через ssh или через терминал"

/etc/sysctl.conf - это глобальная конфигурация всей системы, здесь мы не можем установить конфигурацию для конкретного пользователя. Он устанавливает максимальный объем ресурса, который может быть использован всеми пользователями / процессами вместе взятыми "

/etc/sysctl.conf - неподходящее место для этого.

Мне нужно будет полностью изучить /etc/security/limits.conf и "pam_limits"