Недавно я проверил один из наших процессов redis к тому, что ulimits, где применяется, используя:
cat /proc/<redis-pid>/limits
И был удивлен, узнав, что это было при низком значении по умолчанию:
Limit Soft Limit Hard Limit
Max open files 4016 4016
Я был удивлен, потому что у нас настроено следующее:
# /etc/sysctl.conf
fs.file-max = 100000
,
# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
,
# /etc/ssh/sshd_config
UsePAM yes
,
# /etc/pam.d/sshd
session required pam_limits.so
Может кто-нибудь сказать мне, почему увеличенный ulimit не применяется к запущенному процессу redis?
Процесс redis выполняется как пользователь 'redis', сервер был перезагружен, так как ограничения были увеличены. Мы на Debian Squeeze.
Параметр sysctl fs.file-max является широким глобальным системным пределом, я не думаю, что это хорошая идея для установки того же значения в ulimit.
Если вы установили ulimit 100000 и sysctl.conf 100000, один пользователь может заблокировать систему
В любом случае, говоря о вашей проблеме, вы должны быть уверены, что ваша система использует pam_limits
источник
Вы включили pam_limits для sshd, но выполняется ли эта команда из сеанса SSH? Возможно, вам придется добавить ту же строку в
/etc/pam.d/login
и / или/etc/pam.d/su
и / или/etc/pam.d/sudo
.источник
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
. Какая Пэм подойдет в этом случае?su [user] -c
команду для запуска скрипта от имени другого пользователя, или ваша программа запускается от имени пользователя root? Если он используетsu
, то вы бы вставили/etc/pam.d/su
. Если вы работаете какroot
, вам, вероятно, лучше с предложением c4f4t0r добавитьulimit
команду в ваш скрипт инициализации.root
разрешено устанавливать любые ограничения, которые он хочет, так что вам не нужно беспокоиться о pam для этого случая.--chuid redis:redis
наstart-stop-daemon
. Теперь я добавил ulimit в скрипт запуска.