Vejo esse erro na parte superior do meu arquivo redis.log:
O número máximo de arquivos abertos atuais é 1024. maxclients foi reduzido para 4064 para compensar o ulimit baixo.
Tenho seguido estes passos para a letra (e reiniciado):
Além disso, vejo isso quando corro ulimit
:
ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535
Esse erro é ilusório? Caso contrário, que outras etapas eu preciso executar? Estou executando o redis 2.8.13 (ponta da árvore) no Ubuntu LTS 14.04.1 (novamente, ponta da árvore).
Aqui estão as informações 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, rodando como 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 limites que tentei definir, ele não deve:
[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.
Outra sugestão para os usuários que encontram esta postagem cujo problema não está relacionado ao pam_limits.so. No meu caso, o Redis estava sendo lançado via supervisord. Nesse caso, o método pelo qual a supervisord alternava os contextos do usuário fazia com que a nova sessão fosse executada com os limites padrão do sistema, não aqueles que eu havia configurado para o usuário.
A solução nesse caso foi encontrada aqui . Resumindo, é necessário definir o limite via ulimit -n como parte do comando de inicialização no supervisord.
Exemplo:
fonte
Além de aumentar o limite de arquivos abertos. Você precisa aumentar o maxclients no seu redis.conf. É apenas 10000 por padrão.
fonte
Nota para outros usuários do Ubuntu com um problema semelhante:
Se você estiver iniciando o Redis na inicialização, por exemplo, via Upstart, poderá definir esse limite com a estrofe "limit".
Então, para nofile:
limit nofile 4096 4096
fonte