Nun, es ist ein bisschen spät für diesen Beitrag, aber da ich gerade viel Zeit (die ganze Nacht) damit verbracht habe, einen neuen Redis-Server 3.0.6 auf Ubuntu 16.04 zu konfigurieren. Ich denke, ich sollte einfach aufschreiben, wie ich es mache, damit andere ihre Zeit nicht verschwenden müssen ...
Bei einem neu installierten Redis-Server werden Sie wahrscheinlich die folgenden Probleme in der Redis-Protokolldatei sehen, die /var/log/redis/redis-server.log ist
Maximal geöffnete Dateien
3917:M 16 Sep 21:59:47.834 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
3917:M 16 Sep 21:59:47.834 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
3917:M 16 Sep 21:59:47.834 # 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'.
Ich habe viele Posts gesehen, in denen Sie aufgefordert wurden,
zu ändern/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000
oder
/etc/sysctl.conf
fs.file-max = 100000
Das könnte in Ubuntu 14.04 funktionieren, aber es funktioniert sicherlich nicht in Ubuntu 16.04. Ich schätze, es hat etwas mit dem Wechsel von Emporkömmling zu Systemd zu tun, aber ich bin kein Experte für Linux-Kernel!
Um dies zu beheben, müssen Sie dies über systemd tun Weg
/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...
Dann müssen Sie den Daemon neu laden und den Dienst neu starten
sudo systemctl daemon-reload
sudo systemctl restart redis.service
Um zu überprüfen, ob es funktioniert, versuchen Sie es mit Cat Proc Limits
cat /run/redis/redis-server.pid
cat /proc/PID/limits
und du wirst sehen
Max open files 65536 65536 files
Max locked memory 65536 65536 bytes
In diesem Stadium ist die maximal geöffnete Datei gelöst.
Maximale Socket-Verbindung
2222:M 16 Sep 20:38:44.637 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
Speicherüberlastung
2222:M 16 Sep 20:38:44.637 # Server started, Redis version 3.0.6
2222:M 16 Sep 20:38:44.637 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
Da diese beiden verwandt sind, werden wir es sofort lösen.
sudo vi /etc/sysctl.conf
# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024
Damit diese Konfigurationen funktionieren, müssen Sie die Konfiguration neu laden
sudo sysctl -p
Transparente riesige Seiten
1565:M 16 Sep 22:48:00.993 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
Um dies dauerhaft zu lösen, folgen Sie dem Vorschlag des Protokolls und ändern Sie rc.local
sudo vi /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
Dies erfordert einen Neustart , sichern Sie Ihre Daten oder tun Sie alles, was Sie brauchen, bevor Sie es tatsächlich tun!
sudo reboot
Überprüfen Sie jetzt erneut Ihr Redis-Protokoll, Sie sollten einen Redis-Server ohne Fehler oder Warnungen haben.