Cóż, trochę za późno na ten post, ale ponieważ właśnie spędziłem dużo czasu (całą noc) na skonfigurowaniu nowego serwera redis 3.0.6 na ubuntu 16.04. Myślę, że powinienem po prostu napisać, jak to robię, aby inni nie musieli tracić czasu...
W przypadku nowo zainstalowanego serwera redis prawdopodobnie zobaczysz następujące problemy w pliku dziennika redis, którym jest /var/log/redis/redis-server.log
Maksymalna liczba otwartych plików
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'.
Widziałem wiele postów, które proponowały modyfikację
/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000
lub
/etc/sysctl.conf
fs.file-max = 100000
To może działać w Ubuntu 14.04, ale na pewno nie działa w Ubuntu 16.04. Myślę, że ma to coś wspólnego ze zmianą z upstart na systemd, ale nie jestem ekspertem od jądra linuxa!
Aby to naprawić, musisz to zrobić systemd sposób
/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...
Następnie musisz ponownie załadować demona i ponownie uruchomić usługę
sudo systemctl daemon-reload
sudo systemctl restart redis.service
Aby sprawdzić, czy to działa, spróbuj ustawić limity cat proc
cat /run/redis/redis-server.pid
cat /proc/PID/limits
a zobaczysz
Max open files 65536 65536 files
Max locked memory 65536 65536 bytes
Na tym etapie maksymalna liczba otwartych plików jest rozwiązana.
Maksymalne połączenie gniazda
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.
Przeciążenie pamięci
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.
Ponieważ te dwa są powiązane, rozwiążemy to od razu.
sudo vi /etc/sysctl.conf
# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024
Teraz, aby te konfiguracje działały, musisz ponownie załadować konfigurację
sudo sysctl -p
Przejrzyste, duże strony
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.
Aby trwale rozwiązać ten problem, postępuj zgodnie z sugestią dziennika i zmodyfikuj 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
Wymaga to zrestartowania , wykonaj kopię zapasową swoich danych lub zrób wszystko, czego potrzebujesz, zanim to zrobisz!
sudo reboot
Teraz sprawdź ponownie log redis, powinieneś mieć serwer redis bez żadnych błędów ani ostrzeżeń.