Как настроить лимит процесса открытия файла пользователем?

8

По умолчанию ограничение на количество открытых файлов на процесс составляет 1024, скажем, в Linux. Для некоторых демонов этого недостаточно. Таким образом, вопрос: Как изменить лимит открытого файла для конкретного пользователя?

maxschlepzig
источник

Ответы:

16

В Linux вы можете настроить его limits.conf, например, через

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf

(который устанавливает как жесткое, так и мягкое ограничение для процессов, запущенных в пользовательской передаче debian, равным 8192)

Вы можете проверить изменение через:

# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files                      (-n) 8192
[..]

Если демон уже запущен, его необходимо перезапустить, чтобы новый предел был выбран. В случае, если демон запускается вручную из сеанса пользователя, пользователь должен повторно войти в систему, чтобы получить новый лимит.

В качестве альтернативы, вы также можете указать дополнительные ограничения напрямую /etc/security/limits.conf, но я предпочитаю .dподход с использованием каталогов для лучшей управляемости.

Для применения различных мягких / жестких ограничений используйте две записи, например

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192

(обоснование этому: мягкое значение устанавливается после входа пользователя в систему, но процессу пользователей разрешено увеличивать ограничение до жесткого ограничения)

Используется limits.conf/ limits.dconfiguration pam_limits.so, которая по умолчанию включена в текущих дистрибутивах Linux.

связанные с

Существует также общесистемное ограничение для Linux /proc/sys/fs/file-max:

Этот файл определяет общесистемное ограничение на количество открытых файлов для всех процессов.

Например, по умолчанию в Ubuntu 10.04:

$  cat /proc/sys/fs/file-max
786046

Псевдо файл /proc/sys/fs/file-nrпредоставляет больше информации, например

$ cat /proc/sys/fs/file-nr
1408    0   786046

количество выделенных файловых дескрипторов (то есть количество файлов, открытых в настоящее время); количество свободных файловых дескрипторов; и максимальное количество файловых дескрипторов

Таким образом, с одной стороны, вам также может потребоваться настроить общесистемный file-maxлимит, если он очень мал и / или система уже очень загружена. С другой стороны, просто увеличения file-maxнедостаточно, потому что оно не влияет на мягкие / жесткие ограничения, установленные механизмом pam_limits.

Чтобы изменить file-maxв командной строке (перезагрузка не требуется):

# sysctl -w fs.file-max=786046

Для постоянных изменений добавить fs.file-max=786046в /etc/sysctl.confили /etc/sysctl.d.

Верхний предел fs.file-maxзаписан в fs.nr_open. Например, (снова) в Ubuntu 10.04:

$ sysctl -n fs.nr_open
1048576

(что составляет 1024 * 1024)

Этот sysctl также настраивается.

maxschlepzig
источник
1
Спасибо за последнюю часть информации - я ломал голову, пытаясь понять, почему я не могу установить ограничение на количество файлов в файле пользователя, превышающее 1048576, в /etc/security/limits.conf
Liczyrzepa