Warum meldet redis ein Limit von 1024 Dateien auch nach dem Update auf limit.conf?

9

Ich sehe diesen Fehler oben in meiner redis.log-Datei:

Derzeit sind maximal 1024 Dateien geöffnet. Maxclients wurde auf 4064 reduziert, um ein niedriges Ulimit auszugleichen.

Ich habe diese Schritte genauestens befolgt (und neu gestartet):

Außerdem sehe ich das, wenn ich renne ulimit:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535

Ist dieser Fehler spezifisch? Wenn nicht, welche anderen Schritte muss ich ausführen? Ich verwende redis 2.8.13 (Spitze des Baumes) unter Ubuntu LTS 14.04.1 (wieder Spitze des Baumes).

Hier ist die Benutzerinfo:

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               

Der Server läuft daher als Ubuntu.

Hier sind meine limits.conf-Datei ohne Kommentare:

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

Und hier ist die Ausgabe von 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'

als sudo

ubuntu@ip-10-102-154-226:~$ sudo sysctl -a| grep fs.file-max
fs.file-max = 1528687

Außerdem wird dieser Fehler oben in der Datei redis.log angezeigt. Ich bin mir nicht sicher, ob er damit zusammenhängt. Es ist sinnvoll, dass der Ubuntu-Benutzer maximal geöffnete Dateien nicht ändern darf, aber angesichts der hohen Grenzwerte, die ich festgelegt habe, sollte er Folgendes nicht benötigen:

[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.
Silber
quelle

Antworten:

4

Sie sollten Ihre Dateien im /etc/pam.d/Verzeichnis bearbeiten .

In Ihrem Fall sollten Sie beim Ausführen sudo -u ubuntu /usr/local/bin/redis-serverdie folgende Zeile zu /etc/pam.d/sudooder hinzufügen , /etc/pam.d/common-session-noninteractivefalls /etc/pam.d/sudodiese enthalten ist:

session required pam_limits.so

Dies sollte helfen, die im Inneren bereitgestellte Konfiguration einzustellen /etc/security/limits.conf.

Navern
quelle
Das war's! Vielen Dank. Klingt nach einem Wechsel von Ubuntu 2012.04 LTS zu Ubuntu 2014.04 LTS.
Silber
Ich bin froh, dass dir das geholfen hat. In der Tat hat mein xubuntu 14.04 diese Zeile nicht in /etc/pam.d/sudo. Ich kann 12.04 momentan nicht überprüfen.
Navern
Wenn Sie systemd unter Debian verwenden, lesen
tholu
3

Ein weiterer Vorschlag für Benutzer, die diesen Beitrag finden, dessen Problem nicht mit pam_limits.so zusammenhängt. In meinem Fall wurde Redis über Supervisord gestartet. In diesem Fall führte die Methode, mit der Supervisord die Benutzerkontexte wechselte, dazu, dass die neue Sitzung mit den Systemstandardgrenzen ausgeführt wurde, nicht mit denen, die ich für den Benutzer konfiguriert hatte.

Die Lösung in diesem Fall wurde hier gefunden . Kurz gesagt, Sie müssen das Limit über ulimit -n als Teil des Startbefehls in Supervisord definieren.

Beispiel:

[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"
modea
quelle
1

Sowie das Limit für geöffnete Dateien zu erhöhen. Sie müssen maxclients in Ihrer redis.conf erhöhen. Standardmäßig sind es nur 10000.

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 1024000
Kareem
quelle
0

Hinweis für andere Ubuntu-Benutzer mit einem ähnlichen Problem:

Wenn Sie Redis beim Booten starten, z. B. über Upstart, können Sie dieses Limit mit der Zeilengruppe "limit" festlegen.

Also für nofile:

limit nofile 4096 4096

DarkNeuron
quelle