Bene, è un po' tardi per questo post, ma dato che ho passato molto tempo (tutta la notte) a configurare un nuovo server redis 3.0.6 su Ubuntu 16.04. Penso che dovrei semplicemente scrivere come lo faccio in modo che gli altri non debbano perdere tempo...
Per un server redis appena installato, probabilmente vedrai i seguenti problemi nel file di registro redis che è /var/log/redis/redis-server.log
Numero massimo di file aperti
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'.
Ho visto molti post che ti dicono di modificare
/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000
o
/etc/sysctl.conf
fs.file-max = 100000
Potrebbe funzionare in Ubuntu 14.04, ma di certo non funziona in Ubuntu 16.04. Immagino che abbia qualcosa a che fare con il passaggio da upstart a systemd, ma non sono un esperto del kernel Linux!
Per risolvere questo problema devi farlo da systemd modo
/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...
Quindi devi ricaricare il demone e riavviare il servizio
sudo systemctl daemon-reload
sudo systemctl restart redis.service
Per verificare se funziona, prova a limitare i limiti di proc
cat /run/redis/redis-server.pid
cat /proc/PID/limits
e vedrai
Max open files 65536 65536 files
Max locked memory 65536 65536 bytes
A questo punto, il file massimo aperto è risolto.
Connessione massima presa
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.
Sovraccarico della memoria
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.
Poiché questi due sono correlati, lo risolveremo immediatamente.
sudo vi /etc/sysctl.conf
# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024
Ora affinché queste configurazioni funzionino, devi ricaricare la configurazione
sudo sysctl -p
Pagine enormi trasparenti
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.
Per risolvere definitivamente questo problema, segui il suggerimento del log e modifica 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
Ciò richiede il riavvio , esegui il backup dei tuoi dati o fai tutto ciò di cui hai bisogno prima di farlo davvero!!
sudo reboot
Ora controlla di nuovo il tuo log redis, dovresti avere un server redis senza errori o avvisi.