Mengapa redis melaporkan batas 1024 file bahkan setelah pembaruan ke limit.conf?

9

Saya melihat kesalahan ini di bagian atas file redis.log saya:

File terbuka maksimum saat ini adalah 1024. maxclients telah dikurangi menjadi 4064 untuk mengimbangi ulimit rendah.

Saya telah mengikuti langkah-langkah ini ke surat (dan reboot):

Selain itu, saya melihat ini ketika saya menjalankan ulimit:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535

Apakah kesalahan ini bermuka dua? Jika tidak, langkah apa lagi yang perlu saya lakukan? Saya menjalankan redis 2.8.13 (ujung pohon) di Ubuntu LTS 14.04.1 (sekali lagi, ujung pohon).

Ini info pengguna:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ps aux | grep redis
root      1027  0.0  0.0  66328  2112 ?        Ss   20:30   0:00 sudo -u ubuntu /usr/local/bin/redis-server /etc/redis/redis.conf
ubuntu    1107 19.2 48.8 7629152 7531552 ?     Sl   20:30   2:21 /usr/local/bin/redis-server *:6379               

Karena itu server berjalan sebagai ubuntu.

Inilah file limit.conf saya tanpa komentar:

ubuntu@ip-XX-XXX-XXX-XXX:~$ cat /etc/security/limits.conf | sed '/^#/d;/^$/d'
ubuntu soft nofile 65535
ubuntu hard nofile 65535
root soft nofile 65535
root hard nofile 65535

Dan ini adalah output dari sysctl fs.file-max:

ubuntu@ip-XX-XXX-XXX-XXX:~$ sysctl -a| grep fs.file-max
sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_symlinks'
fs.file-max = 1528687
sysctl: permission denied on key 'kernel.cad_pid'
sysctl: permission denied on key 'kernel.usermodehelper.bset'
sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
sysctl: permission denied on key 'net.ipv4.tcp_fastopen_key'

sebagai sudo

ubuntu@ip-10-102-154-226:~$ sudo sysctl -a| grep fs.file-max
fs.file-max = 1528687

Juga, saya melihat kesalahan ini di bagian atas file redis.log, tidak yakin apakah itu terkait. Masuk akal bahwa pengguna ubuntu tidak diizinkan untuk mengubah file max terbuka, tetapi mengingat ulimit tinggi saya telah mencoba untuk mengatur dia tidak perlu:

[1050] 23 Aug 21:00:43.572 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
[1050] 23 Aug 21:00:43.572 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
esilver
sumber

Jawaban:

4

Anda harus mengedit file Anda di dalam /etc/pam.d/direktori.

Dalam kasus Anda ketika Anda menjalankan sudo -u ubuntu /usr/local/bin/redis-server, Anda harus menambahkan baris berikut ke /etc/pam.d/sudoatau /etc/pam.d/common-session-noninteractivedalam kasus /etc/pam.d/sudotermasuk yang ini:

session required pam_limits.so

Ini akan membantu pengaturan konfigurasi yang disediakan di dalam /etc/security/limits.conf.

Navern
sumber
Itu dia! Terima kasih banyak. Kedengarannya seperti perubahan dari Ubuntu 2012.04 LTS ke Ubuntu 2014.04 LTS.
esilver
Senang itu membantu Anda. Memang xubuntu 14.04 saya tidak memiliki baris ini di dalam /etc/pam.d/sudo. Tidak dapat memeriksa 12,04 sekarang.
Navern
Saat menggunakan systemd pada Debian, lihat serverfault.com/questions/770037/...
tholu
3

Saran lain untuk pengguna yang menemukan posting ini yang masalahnya tidak terkait dengan pam_limits.so. Dalam kasus saya, Redis diluncurkan melalui pengawas. Dalam hal ini, metode di mana pengawas beralih konteks pengguna menyebabkan sesi baru dijalankan dengan batas standar sistem, bukan yang saya konfigurasikan untuk pengguna.

Solusi dalam kasus itu ditemukan di sini . Singkatnya, Anda perlu mendefinisikan batas melalui ulimit -n sebagai bagian dari perintah startup di supervisord.

Contoh:

[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"
modea
sumber
1

Serta meningkatkan batas file terbuka. Anda perlu meningkatkan maxclients di redis.conf Anda. Ini hanya 10.000 secara default.

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 1024000
Kareem
sumber
0

Catatan untuk pengguna Ubuntu lainnya dengan masalah yang sama:

Jika Anda memulai Redis saat boot, f.ex melalui Pemula, Anda dapat mengatur batas ini dengan bait "limit".

Jadi untuk nofile:

limit nofile 4096 4096

DarkNeuron
sumber