Por que o Redis informa um limite de 1024 arquivos mesmo após a atualização para o limits.conf?

9

Eu vejo esse erro no topo do meu arquivo redis.log:

Current maximum open files is 1024. maxclients has been reduced to 4064 to compensate for low ulimit.

Eu tenho seguiu estes passos para a letra (e reiniciou):

Além disso, vejo isso quando executo ulimit :

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

Este erro é ilusório? Se não, quais outras etapas eu preciso executar? Estou executando o redis 2.8.13 (ponta da árvore) no Ubuntu LTS 14.04.1 (novamente, a dica da árvore).

Aqui está a informação do usuário:

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               

O servidor está, portanto, sendo executado como o Ubuntu.

Aqui está o meu arquivo limits.conf sem comentários:

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

E aqui está a saída do 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'

como sudo

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

Além disso, vejo esse erro na parte superior do arquivo redis.log, não tenho certeza se está relacionado. Faz sentido que o usuário do ubuntu não tenha permissão para alterar o máximo de arquivos abertos, mas, considerando os altos ulimits que tentei definir, ele não deveria precisar:

[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.
    
por esilver 23.08.2014 / 22:38

4 respostas

4

Você deve editar seus arquivos dentro do diretório /etc/pam.d/ .

No seu caso, quando você executar sudo -u ubuntu /usr/local/bin/redis-server , adicione a seguinte linha a /etc/pam.d/sudo ou a /etc/pam.d/common-session-noninteractive , caso /etc/pam.d/sudo inclua este:

session required pam_limits.so

Isso deve ajudar a definir a configuração fornecida dentro de /etc/security/limits.conf .

    
por 24.08.2014 / 00:25
3

Outra sugestão para os usuários que encontrarem essa postagem cujo problema não está relacionado a pam_limits.so. No meu caso, o Redis estava sendo lançado via supervisord. Nesse caso, o método pelo qual os contextos de usuário comutados pelo supervisord faziam com que a nova sessão fosse executada com os limites padrão do sistema, não com aqueles configurados para o usuário.

A solução encontrada nesse caso foi aqui . O mais curto é que você precisa definir o limite via ulimit -n como parte do comando de inicialização no supervisord.

Exemplo:

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

Nota para outros usuários do Ubuntu com um problema semelhante:

Se você está começando o Redis no boot, f.ex via Upstart, você pode definir esse limite com a estrofe "limit".

Portanto, para nofile:

limit nofile 4096 4096

    
por 09.08.2016 / 19:23
0

Além de aumentar o limite de arquivos abertos. Você precisa aumentar o maxclients no seu redis.conf. É apenas 10000 por padrão.

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 1024000
    
por 09.08.2018 / 16:51

Tags