Recientemente verifiqué uno de nuestros procesos de redis para determinar qué límites se aplicaron con:
cat /proc/<redis-pid>/limits
Y me sorprendió saber que estaba en el valor predeterminado bajo:
Limit Soft Limit Hard Limit
Max open files 4016 4016
Me sorprendió, porque tenemos configurado lo siguiente:
# /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
¿Alguien puede decirme por qué el aumento de ulimit no se aplica al proceso de redis en ejecución?
El proceso de redis se ejecuta como el usuario 'redis', el servidor se ha reiniciado desde que se aumentaron los límites. Estamos en Debian Squeeze.
El parámetro sysctl fs.file-max es un amplio límite global del sistema, no creo que sea una buena idea establecer ulimit el mismo valor.
Si configura en ulimit 100000 y también en sysctl.conf 100000, un usuario puede bloquear el sistema
De cualquier manera, hablando de su problema, debe estar seguro, su sistema usa pam_limits
fuente
Ha habilitado pam_limits para sshd, pero ¿se está ejecutando este comando desde una sesión SSH? Es posible que deba agregar la misma línea a
/etc/pam.d/login
y / o/etc/pam.d/su
y / o/etc/pam.d/sudo
.fuente
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
. ¿Qué pam sería apropiado en este caso?su [user] -c
comando para iniciar el script como otro usuario, o su programa se ejecuta como root? Si está usandosu
, entonces lo pondrías/etc/pam.d/su
. Si está ejecutando comoroot
, probablemente sea mejor con la sugerencia de c4f4t0r de agregar elulimit
comando en su script de inicio.root
se le permite establecer los límites que desee, por lo que realmente no tiene que preocuparse por pam para ese caso.--chuid redis:redis
enstart-stop-daemon
. He agregado el ulimit al script de inicio ahora.