Redis, limit.conf dosyasına güncellendikten sonra bile 1024 dosyayı sınırlandırıyor?


9

Redis.log dosyamın en üstünde bu hatayı görüyorum:

Mevcut maksimum açık dosyalar 1024'tür. Maksimum ulimiti telafi etmek için maks.

Mektuba aşağıdaki adımları izledim (ve yeniden başlattım):

Dahası, koşarken bunu görüyorum ulimit:

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

Bu hata fena mı? Değilse, başka hangi adımları gerçekleştirmem gerekir? Ubuntu LTS 14.04.1'de (yine ağacın ucu) 2.8.13 (ağacın ucu) redis çalıştırıyorum.

Kullanıcı bilgileri:

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               

Bu nedenle sunucu ubuntu olarak çalışıyor.

İşte benim yorumsuz benim limit.conf dosya:

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

Ve sysctl fs.file-max çıktısı:

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'

sudo olarak

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

Ayrıca, redis.log dosyasının üstünde bu hatayı görüyorum, ilişkili olup olmadığından emin değilim. Ubuntu kullanıcısının maksimum açık dosyaları değiştirmesine izin verilmiyor, ancak ayarlamaya çalıştığım yüksek ulimitler göz önüne alındığında aşağıdakileri yapması gerekmiyor:

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

Yanıtlar:


4

/etc/pam.d/Dizin içindeki dosyalarınızı düzenlemelisiniz .

Çalıştırmak için durumunda sudo -u ubuntu /usr/local/bin/redis-server, sen aşağıdaki satırı eklemek gerekir /etc/pam.d/sudoveya /etc/pam.d/common-session-noninteractivedurumunda /etc/pam.d/sudobu birini içerir:

session required pam_limits.so

Bu, içinde sağlanan yapılandırmanın ayarlanmasına yardımcı olmalıdır /etc/security/limits.conf.


Hepsi bu kadar! Çok teşekkürler. Ubuntu 2012.04 LTS'den Ubuntu 2014.04 LTS'ye bir değişiklik gibi görünüyor.
esilver

Sana yardım ettiğine sevindim. Aslında benim xubuntu 14.04'm /etc/pam.d/sudo içinde bu satırı içermiyor. Şu anda 12.04 kontrol edilemiyor.
Navern

Debian üzerinde systemd kullanırken, bkz serverfault.com/questions/770037/...
tholu

3

Bu yayını, sorunu pam_limits.so ile ilişkili olmayan kullanıcılar için başka bir öneri. Benim durumumda, Redis süpervizör aracılığıyla başlatıldı. Bu durumda, süpervizörün kullanıcı bağlamlarını değiştirdiği yöntem, yeni oturumun kullanıcı için yapılandırdığım oturumların değil, sistem varsayılan limitleriyle çalışmasına neden oldu.

Bu durumda çözüm burada bulundu . Kısaca, limiti süpervizördeki başlatma komutunun bir parçası olarak ulimit -n aracılığıyla tanımlamanız gerekir.

Misal:

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

1

Açık dosya sınırını artırmanın yanı sıra. Redis.conf dosyasındaki maxclients değerini artırmanız gerekir. Varsayılan olarak yalnızca 10000'dir.

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

0

Benzer bir sorunu olan diğer Ubuntu kullanıcıları için not:

Redis'i önyüklemede, f.ex ile Upstart üzerinden başlatıyorsanız, bu sınırı "limit" stanza ile ayarlayabilirsiniz.

Yani nofile için:

limit nofile 4096 4096

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.