sql >> Database >  >> NoSQL >> Redis

Waarom redis het maximale open bestand niet kan instellen?

Nou, het is een beetje laat voor dit bericht, maar aangezien ik zojuist veel tijd (de hele nacht) heb besteed aan het configureren van een nieuwe redis-server 3.0.6 op ubuntu 16.04. Ik denk dat ik gewoon moet opschrijven hoe ik het doe, zodat anderen hun tijd niet hoeven te verspillen...

Voor een nieuw geïnstalleerde redis-server zult u waarschijnlijk de volgende problemen tegenkomen in het redis-logbestand /var/log/redis/redis-server.log

Maximum aantal geopende bestanden

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

Ik heb veel berichten gezien die je vertellen om te wijzigen

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

of

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

Dat werkt misschien in ubuntu 14.04, maar het werkt zeker niet in ubuntu 16.04. Ik denk dat het iets te maken heeft met het veranderen van upstart naar systemd, maar ik ben geen expert op het gebied van Linux-kernel!

Om dit op te lossen, moet je het systemd . doen manier

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

Vervolgens moet je de daemon opnieuw laden en de service herstarten

sudo systemctl daemon-reload
sudo systemctl restart redis.service

Om te controleren of het werkt, probeer je de proc-limieten te overschrijden

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

en je zult zien

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

In dit stadium is het maximaal geopende bestand opgelost.

Maximale aansluiting stopcontact

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.

Geheugen overcommit

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.

Aangezien deze twee verband houden, zullen we het meteen oplossen.

sudo vi /etc/sysctl.conf

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

Om deze configuraties te laten werken, moet je de configuratie opnieuw laden

sudo sysctl -p

Transparante grote pagina's

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.

Om dit permanent op te lossen, volgt u de suggestie van het logboek en wijzigt u 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

Hiervoor moet u opnieuw opstarten , maak een back-up van uw gegevens of doe alles wat u nodig heeft voordat u het daadwerkelijk doet!!

sudo reboot

Controleer nu je redis-log opnieuw, je zou een redis-server moeten hebben zonder fouten of waarschuwingen.



  1. Wat is MapReduce Key Value Pair in Hadoop?

  2. Hoe de uitvoeringstijd van een Lua-script in Redis bepalen?

  3. Hoe ClassNotFoundException op te lossen:com.mongodb.connection.BufferProvider?

  4. mongodb voegt teller toe aan elk opgehaald document