Tentando resolver “nginx muitos arquivos”

2

Recentemente, começamos a receber o seguinte erro em uma de nossas caixas nginx:

2011/05/25 16:35:51 [alert] 3580#0: accept() failed (24: Too many open files)

Verificando o /etc/security/limits.conf, nós temos isto:

*                soft    nofile          900000
*                hard    nofile          900000

mas quando fizemos cat / proc / {pid} / limits ele mostrou que o limite de arquivo era 1024. Quando reiniciamos nginx o problema foi corrigido e / proc / {pid} / limits mostrou 900000. Estou pensando que isso pode foram causados porque a máquina foi reinicializada e, no boot, o nginx foi iniciado antes que os limites fossem aplicados. No entanto, tudo o que tenho lido sobre como os limites e o pam funcionam sugerem que isso não é realmente o modo como os ulimits funcionam. Alguém sabe o que está acontecendo aqui?

Edit: Desculpe, deve mencionar o SO e outras coisas. Estamos rodando o CentOS com o kernel 2.6.18-194.26.1.el5 e o nginx 1.0.1

    
por Mediocre Gopher 27.05.2011 / 16:40

1 resposta

2

Este relatório de bug parece confirmar sua suspeita inicial:

This is the wrong answer to the question "how do I set ulimits for a daemon process?" /etc/security/limits.d is only processed by pam_limits, which has no reason to be in the path for service startup.

No reinício manual, por outro lado, o nginx está herdando os limites do seu shell.

A solução alternativa: basta chamar ulimit no nitscript do nginx. Você não pode usar ulimit -n como usuário regular, mas o script de inicialização deve ter privilégios suficientes ao ser executado na inicialização.

    
por 27.05.2011 / 17:33