Java.io.IOException: Too many open files

12 respostas
A

Galera,

estou tendo um problema para envio de e-mails usando JavaMail, o sistema operacional que estou usando é Red Hat, ja setei varias configuracoes no Sistema Operacional e nada o erro continua. Alguem já passou por esse problema? Ja tentei de tudo, mas o erro infeliz continua.

A Exception é java.io.IOException: Too many open files.

Alguma luz?

Abs

12 Respostas

pcalcado

Você está usando algum servidor?

[]s

A

Estou utilizando o PostFix.

Fiz um teste, enquanto estava dando rodando o aplicativo java enviando os emails e retornando o erro “Too many open File”, efetuei um teste com o servidor SMTP, conectei na porta 25 e envie alguns emails de teste para testar o servidor e o postfix nao retornava erro. Estou ficando louco com esse erro.

_fs

Pergunta cretina: você está fazendo acesso a arquivos em disco, certo? Está fechando os objetos de stream?

às vezes perguntas cretinas ajudam \o/

pcalcado

Uhm…ç eu estfalandod e servidor de aplicação :wink:

Alguns têm opções para abrir menos arquivos e tal, ams provavelmente a sugestão do lipe é a mais acertada: como andam seus streams?

[]s

A

Acesso apenas um arquivo, o processo funciona assim:

Transformo um arquivo XML com XSL e um grande arquivo com todos os e-mails e como o arquivo fica muito grande utilizo SAX para ler esse arquivo e enviar os e-mail.

Mando os e-mail criando Threads, a média de envio é de 150 emails segundo, mas depois de um tempo envio, comeco a ter o erro.
Juro vou ficar maluco com esse erro.

O estranho é que á maquina esta normal, consigo criar arquivos, abrir arquivos, tudo fica normal.

O que esta parecendo é que depois que mando para o JavaMail ele vai fazer a comunicao com o servidor SMTP e nao esta fechando os sockets que ele abre. Utilizo o comando lsof para ver os arquivos abertos, mas nao tenho nada de anormal.

Galera valeu pela ajuda que vcs estao dando.

pcalcado

Se cada thread está abrindo n arquivos [n>0], sua aplicação está abrindo (n* num de threads) arquivos, o que pode ser muita coisa. Existe um limite no número de arquivos que um programa pode abrir. verifique isto aí, e lembre-se que SAX parseia o arquivo aos ‘pedaços’…
[]s

A

Valeu pelas dicas!

Mas o que eu estranho é que pelo o que eu li esse erro é do sistema operacional, e setei todas as configuracoes de sistema, aumento o número maximo de arquivos abertos, e nada. Nenhum um efeito.

Mas com os testes que eu fiz, verifiquei que o sistema esta legal ainda, e posso criar arquivos ainda. Alguem sabe dizer se o java tem alguma limitacao quanto a arquivos? Ou alguma configuracao, que eu posso setar?

Mais uma vez obrigado.

pcalcado

Cara, independente de configuração limite do java ou do SO, você não está abrindo arquivos demais não? Tente usar DOM, fechar seus streams e fazer cache em memória não tem porque abrir tantos arquivos!!

[]s

A

Entao sobre o DOM, é impossivel o arquivo tem mais de 8 Gigas, tentei fazer isso.

Fiz um teste sem envio de e-mail, apenas lendo todo o XML e gravando as mensagens em disco, tudo ocorreu normalmente. :frowning:

A

Esse artigo ajudou resolver o problema.
http://support.bea.com/support_news/product_troubleshooting/Too_Many_Open_Files_Pattern.html

O problema não estava no java, estava no SO.

Obrigado a todos

pcalcado

Cara, pelo que li na doc da Bea, parece que nem em um nem em outro, era a questã que seu programa estava abrindo arquivos demais, sejam .class, xml ou o que for.

Sistemas Operacionais sempre tiveram limitações em número de arquivos abertos.

Como você resolveu afinal?

[]s

A

Foram atualizando alguns parametros do sistema operacional, em relacao a conexoes TCP, numero limite de arquivos abertos entre outras que nao me lembro.

O problema estava na quantidade de conexoes TCP que eram feitas com o servidor SMTP, no artigo ele fala como funciona o processo de conexoes TCP, que é sempre criado um arquivo para conexao, e as conexoes tem tempo de reciclagem, timeout.

Resumindo, o problema foi resolvido acertando detalhes de conexoes TCP e limitacoes de arquivos abertos mesmo.

Mas esse artigo da BEA é muito show.

Criado 6 de julho de 2004
Ultima resposta 7 de jul. de 2004
Respostas 12
Participantes 3