Ten błąd pojawia się u góry mojego pliku redis.log:
Bieżące maksymalne otwarte pliki to 1024. Maksymalna liczba klientów została zmniejszona do 4064 w celu zrekompensowania niskiej ulimit.
Mam następnie kroki do listu (i ponownym uruchomieniu):
Co więcej, widzę to po uruchomieniu ulimit
:
ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535
Czy ten błąd jest spekulacyjny? Jeśli nie, jakie inne kroki muszę wykonać? Używam Redis 2.8.13 (czubek drzewa) na Ubuntu LTS 14.04.1 (ponownie czubek drzewa).
Oto informacje o użytkowniku:
ubuntu@ip-XX-XXX-XXX-XXX:~$ ps aux | grep redis
root 1027 0.0 0.0 66328 2112 ? Ss 20:30 0:00 sudo -u ubuntu /usr/local/bin/redis-server /etc/redis/redis.conf
ubuntu 1107 19.2 48.8 7629152 7531552 ? Sl 20:30 2:21 /usr/local/bin/redis-server *:6379
Serwer działa zatem jako Ubuntu.
Oto mój plik limit.conf bez komentarzy:
ubuntu@ip-XX-XXX-XXX-XXX:~$ cat /etc/security/limits.conf | sed '/^#/d;/^$/d'
ubuntu soft nofile 65535
ubuntu hard nofile 65535
root soft nofile 65535
root hard nofile 65535
A oto wynik działania sysctl fs.file-max:
ubuntu@ip-XX-XXX-XXX-XXX:~$ sysctl -a| grep fs.file-max
sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_symlinks'
fs.file-max = 1528687
sysctl: permission denied on key 'kernel.cad_pid'
sysctl: permission denied on key 'kernel.usermodehelper.bset'
sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
sysctl: permission denied on key 'net.ipv4.tcp_fastopen_key'
jak sudo
ubuntu@ip-10-102-154-226:~$ sudo sysctl -a| grep fs.file-max
fs.file-max = 1528687
Widzę również ten błąd na górze pliku redis.log, nie jestem pewien, czy jest on powiązany. Ma to sens, że użytkownik ubuntu nie może zmieniać maksymalnej liczby otwartych plików, ale biorąc pod uwagę wysokie limity, które próbowałem ustawić, nie powinien:
[1050] 23 Aug 21:00:43.572 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
[1050] 23 Aug 21:00:43.572 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
Kolejna sugestia dla użytkowników, którzy znaleźli ten post, którego problem nie jest związany z pam_limits.so. W moim przypadku Redis został uruchomiony za pośrednictwem superwizora. W tym przypadku metoda, za pomocą której nadzorca przełączał konteksty użytkownika, spowodowała uruchomienie nowej sesji z domyślnymi limitami systemowymi, a nie tymi, które skonfigurowałem dla użytkownika.
Rozwiązanie w tym przypadku znaleziono tutaj . Krótko mówiąc, musisz zdefiniować limit za pomocą ulimit -n jako część polecenia startowego w superwizji.
Przykład:
źródło
Jak również zwiększenie limitu otwartych plików. Musisz zwiększyć maxclients w swoim redis.conf. Domyślnie jest to tylko 10000.
źródło
Uwaga dla innych użytkowników Ubuntu z podobnym problemem:
Jeśli uruchamiasz Redis przy rozruchu, np. Przez Upstart, możesz ustawić ten limit za pomocą zwrotki „limit”.
Więc dla nofile:
limit nofile 4096 4096
źródło