По умолчанию ограничение на количество открытых файлов на процесс составляет 1024, скажем, в Linux. Для некоторых демонов этого недостаточно. Таким образом, вопрос: Как изменить лимит открытого файла для конкретного пользователя?
источник
По умолчанию ограничение на количество открытых файлов на процесс составляет 1024, скажем, в Linux. Для некоторых демонов этого недостаточно. Таким образом, вопрос: Как изменить лимит открытого файла для конкретного пользователя?
В 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.d
configuration 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 также настраивается.