Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Mengapa redis tidak dapat mengatur file terbuka maksimum

Yah, agak terlambat untuk posting ini, tetapi karena saya hanya menghabiskan banyak waktu (sepanjang malam) untuk mengkonfigurasi server redis baru 3.0.6 di ubuntu 16.04. Saya pikir saya harus menuliskan bagaimana saya melakukannya sehingga orang lain tidak perlu membuang waktu mereka...

Untuk server redis yang baru diinstal, Anda mungkin akan melihat masalah berikut dalam file log redis yaitu /var/log/redis/redis-server.log

Berkas Terbuka Maksimum

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

Saya telah melihat banyak posting yang meminta Anda untuk memodifikasi

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

atau

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

Itu mungkin berfungsi di ubuntu 14.04, tetapi tentu saja tidak berfungsi di ubuntu 16.04. Saya kira ini ada hubungannya dengan perubahan dari pemula ke systemd, tapi saya bukan ahli kernel linux!

Untuk memperbaikinya, Anda harus melakukannya systemd cara

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

Maka Anda harus memuat ulang daemon dan memulai ulang layanan

sudo systemctl daemon-reload
sudo systemctl restart redis.service

Untuk memeriksa apakah berhasil, coba cat batas proc

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

dan Anda akan melihat

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

Pada tahap ini, file terbuka maksimum telah diselesaikan.

Koneksi Maksimum Soket

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.

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

Karena keduanya terkait, kami akan menyelesaikannya sekaligus.

sudo vi /etc/sysctl.conf

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

Sekarang agar konfigurasi ini berfungsi, Anda perlu memuat ulang konfigurasi

sudo sysctl -p

Halaman Besar Transparan

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.

Untuk mengatasi ini secara permanen, ikuti saran log, dan ubah 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

Ini mengharuskan Anda untuk me-boot ulang , buat cadangan data Anda atau lakukan apa pun yang Anda perlukan sebelum benar-benar melakukannya!!

sudo reboot

Sekarang periksa log redis Anda lagi, Anda seharusnya memiliki server redis tanpa kesalahan atau peringatan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memeriksa apakah redis berjalan sebelum saya memulai flask (dan memulainya jika tidak)?

  2. Menggunakan redis sebagai cache LRU untuk postgres

  3. Penyerapan massal ke Redis

  4. socket.io redis dan kebocoran memori

  5. Memahami latensi menggunakan Redis-Cli