Recentemente, verifiquei um de nossos processos redis para quais ulimits foram aplicados usando:
cat /proc/<redis-pid>/limits
E ficou surpreso ao saber que estava com o baixo valor padrão:
Limit Soft Limit Hard Limit
Max open files 4016 4016
Fiquei surpreso, porque temos o seguinte configurado:
# /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
Alguém pode me dizer por que o aumento do ulimit não está sendo aplicado ao processo redis em execução?
O processo redis está sendo executado como o usuário 'redis', o servidor foi reinicializado desde que os limites foram aumentados. Estamos no Debian Squeeze.
O parâmetro sysctl fs.file-max é um amplo limite global do sistema, não acho que seja uma boa ideia definir ulimit com o mesmo valor.
Se você definir no ulimit 100000 e no sysctl.conf 100000 também, um usuário poderá bloquear o sistema
De qualquer forma, falando sobre seu problema, você precisa ter certeza de que seu sistema usa pam_limits
fonte
Você ativou pam_limits para sshd, mas esse comando está sendo executado em uma sessão SSH? Pode ser necessário adicionar a mesma linha para
/etc/pam.d/login
e / ou/etc/pam.d/su
e / ou/etc/pam.d/sudo
.fonte
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
. Que pam seria apropriado neste caso?su [user] -c
comando para iniciar o script como outro usuário ou o seu programa é executado como root? Se estiver usandosu
, você o colocará/etc/pam.d/su
. Se você está executando comoroot
, provavelmente está melhor com a sugestão de c4f4t0r de adicionar oulimit
comando no seu script init.root
tem permissão para definir os limites que deseja, para que você não precise se preocupar com o pam para esse caso.--chuid redis:redis
emstart-stop-daemon
. Adicionei o ulimit ao script de inicialização agora.