quinta-feira, 13 de setembro de 2007

java.net.SocketException: Too many open files

Me deparei com este erro no Linux. O erro era de configuração do SO e não da aplicação ou algo da JVM.
O Linux tem uma configuração padrão de quantidade de arquivos abertos (Open files ou File descriptors). É importante observar que conexões TCP são contadas como arquivos abertos.
Para monitorar a quantidade de arquivos abertos para um determinado processo use o comando:

lsof -p [no. do processo] | wc -l

Para ver quais são os arquivos use apenas:

lsof -p [no. do processo]

Para verificar a quantidade máxima configurada, use o comando:

ulimit -n

O valor retornado será a quantidade configurada. O default é 1024. Para alterar este valor use o comando:

ulimit -n [qtd máxima desejada]

O novo valor passara a vigorar imediatamente, porém caso a máquina seja reiniciada o valor padrão(1024) voltara. Para alterar este valor definitivamente, acrescente a linha abaixo ao arquivo /etc/security/limits.conf :

- nofile [qtd máxima desejada]

PS. Antes de aumentar esses valores verifique se esta fechando corretamente os recursos utilizados pela aplicação.

Nenhum comentário: