Limite do descritor de arquivo no nginx / aplicativo do passageiro

2

Estamos executando um aplicativo Rails no Passenger 4.0.45 e no nginx 1.6.0 (instalado pelo instalador do Passenger) em execução no Ubuntu 14.04. Sob carga pesada, o Passenger reinicia todos os processos da aplicação. Depois de ativar os registros de depuração de passageiros, encontrei os erros "Não é possível aceitar o cliente: muitos arquivos abertos (errno = 24)" nos registros do Passenger.

O Nginx está configurado com "worker_rlimit_nofile 200000". Usando cat /proc/pid/limits , posso confirmar que o nginx tem os limites corretos. Nosso aplicativo Rails rodando no Passenger, no entanto, não está recebendo um limite maior.

Adicionei /etc/security/limits.conf para conceder a todos os usuários um limite alto e adicionei session required pam_limits.so a /etc/pam.d/common-session e /etc/pam.d/common-session-noninteractive 'e reiniciei.

eu posso correr

su appuser --shell /bin/bash --command "ulimit -n"

e eu recebo um número alto.

Eu finalmente tentei definir o limite dentro do aplicativo Rails adicionando o seguinte a um inicializador:

Process.setrlimit(Process::RLIMIT_NOFILE, 65535)

O resultado é:

Operation not permitted - setrlimit (Errno::EPERM)
    
por Robin Daugherty 10.07.2014 / 23:40

1 resposta

1

Eu recebi ajuda da Phusion para resolver esse problema, então aqui está a solução que eu criei. Quando o nginx inicia no Ubuntu, o script de inicialização procura /etc/default/nginx e executa os comandos encontrados antes de iniciar o nginx.

Então (além das configurações de limites acima) adicionando /etc/default/nginx com o seguinte conteúdo:

ulimit -Hn 200000
ulimit -Sn 200000

e, em seguida, reiniciar o nginx, corrigiu o problema. Isso se aplica ao nginx e a todos os processos de passageiros, incluindo os processos PassengerHelperAgent e Rails.

    
por 14.07.2014 / 16:57