Pular para o conteúdo

Too many open files

Todo processo no Linux roda com limites. Um desses limites é o número de arquivos e sockets de rede que um processo pode abrir ao mesmo tempo. Quando o limite é baixo demais, você pode ver o erro Too many open files.

No Astra, esse erro pode aparecer quando o limite do sistema não está alto o suficiente. Por padrão, se você instalou o Astra com o comando astra init (como descrito no nosso guia de início rápido), o limite é definido em 65536 arquivos abertos. Esse valor costuma ser suficiente para a maioria dos casos.

Se você inicia o Astra de outra forma, precisa garantir que o limite de arquivos abertos esteja configurado corretamente. Veja abaixo os casos mais comuns.

Ao usar um script init.d, você precisa aumentar o limite antes de iniciar o Astra. Adicione a linha ulimit -n 65536 antes do comando que inicia o Astra.

Exemplo de script:

Terminal window
if [ "$1" = "start" ]; then
/usr/bin/astra -c /etc/astra/astra.conf -p 8000 --pid /var/run/astra.pid --log /var/log/astra.log --daemon
elif [ "$1" = "stop" ]; then
if [ -f /var/run/astra.pid ]; then
kill $(cat /var/run/astra.pid)
fi
elif [ "$1" = "restart" ]; then
$0 stop
sleep 1
$0 start
fi

Para serviços systemd, você deve definir o limite dentro do arquivo de serviço. Na seção [Service], adicione:

[Service]
Type=simple
LimitNOFILE=65536
ExecStart=/usr/bin/astra -c /etc/astra/astra.conf -p 8000 --log /var/log/astra.log --no-stdout

Isso garante que o Astra consiga abrir arquivos e sockets suficientes sem cair no erro.

Você pode verificar o limite atual de arquivos abertos de um processo em execução com os comandos ulimit ou cat.

Se você estiver no mesmo shell em que o Astra está rodando, execute:

Terminal window
ulimit -n

Isso mostra o número máximo de arquivos abertos para esse shell (e para qualquer processo iniciado a partir dele).

Se o Astra já estiver rodando como daemon, descubra o ID do processo (PID) e verifique diretamente:

Terminal window
pidof astra

Isso retorna o PID do processo do Astra. Depois execute:

Terminal window
cat /proc/<PID>/limits | grep "open files"

Exemplo de saída:

Max open files 65536 65536 files