Е, малко е късно за тази публикация, но тъй като току-що прекарах много време (цяла нощ), за да конфигурирам нов Redis сървър 3.0.6 на ubuntu 16.04. Мисля, че просто трябва да напиша как го правя, за да не се налага другите да си губят времето...
За новоинсталиран сървър на redis вероятно ще видите следните проблеми в регистрационния файл на redis, който е /var/log/redis/redis-server.log
Максимален брой отворени файлове
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'.
Виждал съм много публикации, които ви казват да промените
/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000
или
/etc/sysctl.conf
fs.file-max = 100000
Това може да работи в ubuntu 14.04, но със сигурност не работи в ubuntu 16.04. Предполагам, че има нещо общо с промяната от upstart към systemd, но аз не съм експерт по ядрото на Linux!
За да поправите това, трябва да го направите в systemd начин
/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...
След това трябва да презаредите демоната и да рестартирате услугата
sudo systemctl daemon-reload
sudo systemctl restart redis.service
За да проверите дали работи, опитайте да поставите ограничения на процеса
cat /run/redis/redis-server.pid
cat /proc/PID/limits
и ще видите
Max open files 65536 65536 files
Max locked memory 65536 65536 bytes
На този етап се решава максимално отворен файл.
Максимална връзка на гнездото
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.
Превързване на памет
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.
Тъй като тези две са свързани, ще го решим веднага.
sudo vi /etc/sysctl.conf
# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024
Сега, за да работят тези конфигурации, трябва да презаредите конфигурацията
sudo sysctl -p
Прозрачни огромни страници
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.
За да разрешите трайно това, следвайте предложението на дневника и променете 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
Това изисква от вас да рестартирате , архивирайте данните си или направете всичко, от което се нуждаете, преди да го направите!
sudo reboot
Сега проверете отново дневника си на redis, трябва да имате сървър за redis без никакви грешки или предупреждения.