Perché redis riporta un limite di 1024 file anche dopo l'aggiornamento a limits.conf?


9

Vedo questo errore nella parte superiore del mio file redis.log:

I file aperti massimi correnti sono 1024. maxclients è stato ridotto a 4064 per compensare l'ulimit basso.

Ho seguito questi passaggi alla lettera (e riavviato):

Inoltre, vedo questo quando corro ulimit:

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

Questo errore è specioso? In caso contrario, quali altri passaggi devo eseguire? Sto eseguendo redis 2.8.13 (punta dell'albero) su Ubuntu LTS 14.04.1 (di nuovo, punta dell'albero).

Ecco le informazioni dell'utente:

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               

Il server funziona quindi come Ubuntu.

Ecco il mio file limits.conf senza commenti:

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

Ed ecco l'output di 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'

come sudo

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

Inoltre, vedo questo errore nella parte superiore del file redis.log, non sono sicuro che sia correlato. È logico che l'utente di Ubuntu non sia autorizzato a modificare il numero massimo di file aperti, ma date le altitudini elevate che ho cercato di impostare, non dovrebbe essere necessario:

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

Risposte:


4

È necessario modificare i file all'interno della /etc/pam.d/directory.

Nel tuo caso quando esegui sudo -u ubuntu /usr/local/bin/redis-server, dovresti aggiungere la seguente riga a /etc/pam.d/sudoo /etc/pam.d/common-session-noninteractivenel caso /etc/pam.d/sudoincluda questa:

session required pam_limits.so

Questo dovrebbe aiutare a impostare la configurazione fornita all'interno /etc/security/limits.conf.


Questo è stato! Grazie mille. Sembra un cambiamento da Ubuntu 2012.04 LTS a Ubuntu 2014.04 LTS.
esilver,

Sono contento che ti abbia aiutato. In effetti il ​​mio xubuntu 14.04 non ha questa linea all'interno di /etc/pam.d/sudo. Impossibile controllare 12.04 in questo momento.
Navern

Quando usi systemd su Debian, vedi serverfault.com/questions/770037/…
tholu

3

Un altro suggerimento per gli utenti che trovano questo post il cui problema non è correlato a pam_limits.so. Nel mio caso, Redis veniva lanciato tramite supervisord. In questo caso, il metodo con cui Supervord ha cambiato i contesti utente ha causato l'esecuzione della nuova sessione con i limiti predefiniti del sistema, non quelli che avevo configurato per l'utente.

La soluzione in quel caso è stata trovata qui . In breve, è necessario definire il limite tramite ulimit -n come parte del comando di avvio in supervisord.

Esempio:

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

1

Oltre ad aumentare il limite di file aperti. Devi aumentare maxclients in redis.conf. Sono solo 10000 per impostazione predefinita.

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

0

Nota per altri utenti Ubuntu con un problema simile:

Se stai avviando Redis all'avvio, f.ex tramite Upstart, puoi impostare questo limite con la stanza "limit".

Quindi per nofile:

limit nofile 4096 4096

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.