Niedawno sprawdziłem jeden z naszych procesów redis do jakich limitów zastosowano przy użyciu:
cat /proc/<redis-pid>/limits
Był zaskoczony, gdy dowiedział się, że ma niską wartość domyślną:
Limit Soft Limit Hard Limit
Max open files 4016 4016
Byłem zaskoczony, ponieważ skonfigurowaliśmy następujące ustawienia:
# /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
Czy ktoś może mi powiedzieć, dlaczego zwiększona ulimit nie jest stosowana do uruchomionego procesu redis?
Proces redis działa jako użytkownik „redis”, serwer został zrestartowany, ponieważ limity zostały zwiększone. Jesteśmy na Debian Squeeze.
Parametr sysctl fs.file-max jest szerokim globalnym limitem systemowym, nie sądzę, że dobrym pomysłem jest ustawienie w ulimit tej samej wartości.
Jeśli ustawisz także w ulimit 100000 i sysctl.conf 100000, jeden użytkownik może zablokować system
W każdym razie, mówiąc o swoim problemie, musisz być pewien, że twój system używa pam_limits
źródło
Włączyłeś pam_limits dla sshd, ale czy to polecenie jest wykonywane z sesji SSH? Może być konieczne dodanie tej samej linii do
/etc/pam.d/login
i / lub/etc/pam.d/su
i / lub/etc/pam.d/sudo
.źródło
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
. Który pam byłby odpowiedni w tym przypadku?su [user] -c
polecenia do uruchomienia skryptu jako inny użytkownik, czy też twój program działa jako root? Jeśli to używasu
, to byś to włożył/etc/pam.d/su
. Jeśli działasz jakoroot
, prawdopodobnie lepiej będzie, jeśli c4f4t0r zaproponuje dodanieulimit
polecenia do skryptu init.root
możesz ustawić dowolne limity, więc tak naprawdę nie musisz się martwić o pam.--chuid redis:redis
nastart-stop-daemon
. Dodałem ulimit do skryptu uruchamiania.