worker_rlimit_nofile
definirá o limite para os descritores de arquivo para os processos do operador, em oposição ao usuário que está executando o nginx. Se outros programas executados sob este usuário não puderem lidar com o esgotamento dos descritores de arquivo, você deverá definir esse limite um pouco menos do que o que é para o usuário.
Primeiro, o que está usando seus descritores de arquivo?
- Cada conexão ativa com um cliente
- Usando proxy_pass? Isso vai abrir um socket para o host: port lidando com essas requisições
- Usando proxy_pass para uma porta local? Isso é outro soquete aberto. (Para o proprietário desse processo)
- arquivos estáticos sendo veiculados por nginx
Por que o limite por trabalhador seria menor que o limite do sistema operacional?
Isso é controlado pelo sistema operacional porque o trabalhador não é o único processo em execução na máquina. Para alterá-lo para o usuário executando nginx, veja abaixo. Seria muito ruim se seus funcionários usassem todos os descritores de arquivos disponíveis para todos os processos, não definindo seus limites para que isso seja possível.
#/etc/sysctl.conf
#This sets the value you see when running cat /proc/sys/fs/file-max
fs.file-max = 65536"
#/etc/security/limits.conf
#this sets the defaults for all users
* soft nofile 4096
* hard nofile 4096
#This overrides the default for user 'usernamehere'
usernamehere soft nofile 10240
usernamehere hard nofile 10240
Após essas alterações no limite de segurança, acredito que ainda precisei aumentar o limite suave para o usuário usando ulimit
.
Como descubro qual é o meu limite agora?
ulimit -a
Exibe todos os limites associados ao usuário em que você o executa.