too many open files

Iniciado por amelotti, 19 de Novembro de 2012, 10:44

tópico anterior - próximo tópico

amelotti

Pessoal,

tenho uma aplicação web aqui, que roda em django, cima do NGinx (com uWSGI). Recentemente habilitamos o memcached também. A aplicação se comunica com outros servidores através do serviço de filas SQS (da Amazon Web Services). A cerca de duas semanas, começamos a receber mensagens "[Errno 24] Too many open files" nos logs de um dos componentes da aplicação (Celery).
Desde o início da operação, esse servidor teve o limite de file descriptors alterado para 65k para usuários e 650k para o sistema. O número de fd por processo não foi alterado (achei o valor inicial de 1048576 razoável). Venho acompanhando o número de fd usados (através do /proc/sys/fs/file-nr e lsof) além do número de conexões de rede (através do netstat) e não vi nada anormal. Durante o monitoramento, nunca passou de 3k. Tem mais algum lugar onde eu possa verificar o que pode estar gerando essas mensagens? Pode ser alguma outra coisa - que, por acaso, está gerando essa mensagem? Nos logs do sistema não vi nenhum indício de erro. O que mais posso verificar? Essa máquina é uma instância EC2 da Amazon (se é que essa informação ajuda em alguma coisa).

Abraços,

Luiz

zekkerj

Todas as instâncias são iniciadas pelo mesmo processo e usuário? Se não forem, é possível que estejam usando perfis de limitação diferentes, causando o problema que vc está observando.

Tente também rever o algoritmo da sua aplicação, pra ver se é necessário mesmo estar com os arquivos abertos o tempo todo. Às vezes uma mudança no enfoque resolve o problema.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

amelotti

Oi Zekkerj,

sim, todos os processos são iniciados com o mesmo usuário. De qualquer forma, todos têm (ou deveriam ter) o mesmo limite. A aplicação, como eu disse, parece não estar mantendo arquivos ou sockets abertos próximo ao limite. Isso é o que eu acho mais estranho. Pelo menos foi o que eu verifiquei usando o lsof, o netstat e o /proc/sys/fs/file-nr. De qualquer forma, vou dar uma verificada no código. Se tiver mais alguma sugestão, por favor me fale :)

Abraços,

Luiz