Wie schon in meinem Artikel Owncloud auf dem 1&1 Cloud Server beschrieben, schreibt der Memory Cache Redis in der Standard-konfiguration beim Start die folgende Warnung in sein logfile:
1 2 3 4 | $ cat /var/log/redis/redis-server.log 34606:M 24 Mar 15:48:38.042 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. 34606:M 24 Mar 15:48:38.042 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted. 34606:M 24 Mar 15:48:38.042 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. |
Wenn weniger clients benötigt werden, kann wie im oben angegebenen Artikel beschrieben, die Redis Konfiguration angepasst werden.
Wenn Sie die größere Anzahl an Clients benötigen, muss das Limit für offene Dateien für den Redis Prozess angepasst werden. Ich musste auch eine Weile suchen. Die meisten Treffer bei meiner Suche liefern Ergebnisse, die für Prozesse, die von systemd gestartet werden, nicht funktionieren. Letztendlich bin ich aber fündig geworden. Den Tip für die richtige Richtung liefern die folgenden beiden Artikel:
Debian 8.4 jessie set open files limit for redis user
und
Debian 8 Systemd Change Service Ulimit
Die Lösung für alle systemd Prozesse, auch für andere Limits, bringt wie immer, das Studium des Manuals, in diesem Falle SYSTEMD.UNIT(5). Das Ändern der Vendor Dateien unter dem Pfad /lib/systemd/ wird nicht empfohlen. Statt dessen erzeugen wir ein „drop-in“ File, das zusätzlich zum Service File gelesen wird.
Hierzu legen wir ein Verzeichnis für unser „drop-in“ File an.
mkdir /etc/systemd/system/redis-server.service.d
Alle Dateien *.conf in diesem Verzeichnis, werden beim Start unseres Redis Prozesses gelesen. In diesem Verzeichnis legen wir eine Datei limits.conf mit folgendem Inhalt an:
1 2 3 | cat /etc/systemd/system/redis-server.service.d/limits.conf [Service] LimitNOFILE=10240 |
Anschliessend muss dem systemd Prozess mitgeteilt werden, dass er seine Konfiguration neu laden soll und der Redis Prozess muss neu gestartet werden.
1 2 | systemctl daemon-reload systemctl restart redis-server.service |
Andere Limit Direktiven sind die Folgenden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | LimitCPU= LimitFSIZE= LimitDATA= LimitSTACK= LimitCORE= LimitRSS= LimitNOFILE= LimitAS= LimitNPROC= LimitMEMLOCK= LimitLOCKS= LimitSIGPENDING= LimitMSGQUEUE= LimitNICE= LimitRTPRIO= LimitRTTIME= |
Siehe hierzu auch die Systemd default Konfiguration in /etc/systemd/system.conf.
Hier werden die Default Werte für die Limits konfiguriert.