Problema
Digamos que você esteja em um sistema Debian ou Ubuntu e acabou de encontrar o problema de que sua instância do Redis precisa de mais descritores de arquivo abertos, mas seu sistema não permite isso.
Então, basicamente, quando você vir este erro em seus registros:
# You requested maxclients of 10000 requiring at least 10032 max file descriptors.
# Redis can't set maximum open files to 10032 because of OS error: Operation not permitted
# Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
Você então pode pensar: “É bom que eu possa usar ulimit -n
para ajustar esse número, mas como posso torná-lo persistente por meio de reinicializações do servidor?”
É aí que começa o problema. Você começa a pesquisar na internet como aumentar os limites máximos de arquivos abertos. Você provavelmente encontrará um monte de dicas que lhe dirão para configurar o seu de /etc/security/limits.conf
acordo, mas isso não funciona, porque o seu usuário redis nem mesmo usa um shell de login, portanto, nenhum pam.
Você abaixa a cabeça de tristeza e pensa em desistir dos computadores e se tornar um florista.
Mas…
Solução
Na verdade, o script init do Redis verificará se uma ULIMIT
variável está definida e chamará ulimit -n $ULIMIT
antes de iniciar a instância do Redis.
Para definir o ULIMIT
var, simplesmente abra /etc/defaults/redis-server
e descomente o ULIMIT=65536
. Reinicie o Redis e ele definirá o ulimit para o usuário redis corretamente.
Espero que isso ajude alguém
(PS apenas testado no Ubuntu)