sql >> Databáze >  >> NoSQL >> Redis

Proč redis nemůže nastavit maximální otevřený soubor

No, na tento příspěvek je trochu pozdě, ale protože jsem právě strávil spoustu času (celou noc) konfigurací nového serveru redis 3.0.6 na ubuntu 16.04. Myslím, že bych měl napsat, jak to dělám já, aby ostatní nemuseli ztrácet čas...

U nově nainstalovaného serveru redis pravděpodobně uvidíte následující problémy v souboru protokolu redis, který je /var/log/redis/redis-server.log

Maximální počet otevřených souborů

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'.

Viděl jsem mnoho příspěvků, které vám říkaly, abyste upravili

/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000

nebo

/etc/sysctl.conf
fs.file-max = 100000

To by mohlo fungovat v ubuntu 14.04, ale rozhodně ne v ubuntu 16.04. Myslím, že to má něco společného s přechodem z upstart na systemd, ale nejsem odborník na linuxové jádro!

Chcete-li to opravit, musíte to provést pomocí systemd způsobem

/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...

Potom musíte znovu načíst démona a restartovat službu

sudo systemctl daemon-reload
sudo systemctl restart redis.service

Chcete-li zkontrolovat, zda to funguje, zkuste limity cat proc

cat /run/redis/redis-server.pid
cat /proc/PID/limits

a uvidíte

Max open files            65536                65536                files     
Max locked memory         65536                65536                bytes   

V této fázi je vyřešen maximální počet otevřených souborů.

Maximální připojení zásuvky

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.

Překročení paměti

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.

Protože tyto dva spolu souvisí, vyřešíme to najednou.

sudo vi /etc/sysctl.conf

# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024

Nyní, aby tyto konfigurace fungovaly, musíte znovu načíst konfiguraci

sudo sysctl -p

Transparentní obrovské stránky

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.

Chcete-li to trvale vyřešit, postupujte podle návrhu protokolu a upravte 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

To vyžaduje, abyste restartovali , zálohujte si data nebo udělejte cokoli, co potřebujete, než to skutečně uděláte!!

sudo reboot

Nyní znovu zkontrolujte svůj protokol redis, měli byste mít server redis bez jakýchkoli chyb nebo varování.



  1. Nové funkce pro správu záloh a zabezpečení pro MySQL a PostgreSQL:ClusterControl Release 1.6.2

  2. Upozornění na vypršení platnosti klíče v redis pythonu

  3. Jak provádět základní operace dotazů v MongoDB

  4. Položka seznamu Redis Pop Podle počtu položek