Bon, c'est un peu tard pour ce post, mais vu que je viens de passer pas mal de temps (toute la nuit) à configurer un nouveau serveur redis 3.0.6 sur ubuntu 16.04. Je pense que je devrais juste écrire comment je le fais pour que les autres n'aient pas à perdre leur temps...
Pour un serveur Redis nouvellement installé, vous allez probablement voir les problèmes suivants dans le fichier journal Redis qui est /var/log/redis/redis-server.log
Fichiers ouverts maximum
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'.
J'ai vu beaucoup de messages vous demandant de modifier
/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000
ou
/etc/sysctl.conf
fs.file-max = 100000
Cela pourrait fonctionner dans Ubuntu 14.04, mais cela ne fonctionnera certainement pas dans Ubuntu 16.04. Je suppose que cela a quelque chose à voir avec le passage de upstart à systemd, mais je ne suis pas un expert du noyau Linux !
Pour résoudre ce problème, vous devez le faire avec le systemd chemin
/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...
Ensuite, vous devez recharger le démon et redémarrer le service
sudo systemctl daemon-reload
sudo systemctl restart redis.service
Pour vérifier si cela fonctionne, essayez de cat proc limits
cat /run/redis/redis-server.pid
cat /proc/PID/limits
et vous verrez
Max open files 65536 65536 files
Max locked memory 65536 65536 bytes
A ce stade, le fichier ouvert maximum est résolu.
Connexion maximale du socket
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.
Surengagement de mémoire
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.
Puisque ces deux éléments sont liés, nous allons le résoudre immédiatement.
sudo vi /etc/sysctl.conf
# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024
Maintenant, pour que ces configurations fonctionnent, vous devez recharger la configuration
sudo sysctl -p
Grandes pages transparentes
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.
Pour résoudre définitivement ce problème, suivez la suggestion du journal et modifiez 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
Cela vous oblige à redémarrer , sauvegardez vos données ou faites tout ce dont vous avez besoin avant de le faire !!
sudo reboot
Maintenant, vérifiez à nouveau votre journal Redis, vous devriez avoir un serveur Redis sans erreurs ni avertissements.