さて、この投稿には少し遅れていますが、ubuntu 16.04で新しいredisサーバー3.0.6を構成するために(一晩中)多くの時間を費やしたためです。他の人が時間を無駄にする必要がないように、自分のやり方を書き留めておけばいいと思います...
新しくインストールされたredisサーバーの場合、/var/log/redis/redis-server.logであるredisログファイルに次の問題が表示される可能性があります。
最大オープンファイル
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
これはubuntu14.04では機能する可能性がありますが、ubuntu16.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
それが機能するかどうかを確認するには、proclimitsをcatしてみてください
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.
この2つは関連しているので、すぐに解決します。
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サーバーが必要です。