[ URGENTE ] - Aplicação com muitos sockets e too many open files exception  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Estou tendo que desenvolver uma aplicação que precisa usar threads para abrir sockets e essas threads também fazem atualizações no banco de dados, ou seja, cada uma tem uma conexão.
Quando aumento o número de threads na aplicação tenho que aumentar o número de conexões com o banco. Quando chego a abrir por volta de 800 a 1000 threads recebo esta exception:

Isso acontece porque tenho muitos sockets abertos, e porque tenho no datasource mais de 500 conexões, então, gostaria de saber se isso é uma limitação ou se é questão de configuração?
Estou usando o tomcat( com dbcp ), jpa e spring.
E esta aplicação precisa manter mais de 500 transações por segundo para um servidor apache, por isso faço com threads as minhas requisções.

This message was edited 2 times. Last update was at 17/12/2009 03:31:19


www.bau-de-dev.com
fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline

Quando aumento o número de threads na aplicação tenho que aumentar o número de conexões com o banco. Quando chego a abrir por volta de 800 a 1000 threads recebo esta exception:


Oi!

Estou achando estes números (800, 1000) muito altos...verifique se vc não está esquecendo de fechar conexões. Verifique também o tempo de processamento das requisições talvez esteja alto demais fazendo com que o número de threads aumente muito.

Não esqueça de verificar tambem o fluxo do processamento nos pontos de controle de exceptions; pode estar havendo alguma exception não controlada fazendo o fluxo terminar tardiamente sem passar pelos códigos que fecham as conexões.

flws
bezier curve
JavaEvangelist
[Avatar]
Membro desde: 28/11/2009 17:55:58
Mensagens: 411
Offline

Se você estiver usando uma máquina Solaris ou Linux ou algum outro Unix existe um parâmetro do kernel que deve ser atualizado, para permitir que um processo possa abrir mais que N arquivos ou sockets.

Suspeito que você esteja usando alguma coisa derivada do Unix, porque no Windows o número excessivo de sockets abertos não provoca esse erro de "Too many open files" mas outra coisa.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

As conexões do banco de dados estão sendo gerenciadas pelo spring e os sockets eu estou fechando corretamente em blocos finally.
Este erro só acontece quando eu aumento o número de sockets e o número de conexões com o banco de dados.
Eu estou usando um linux para rodar a aplicação. Achei este comando "ulimit -a" que fala que open files na máquina tem o máximo de 1024.
Então fiz um java simples que só ficava abrindo arquivos e contando quanto arquivos eu abri e consegui chegar a 4200 . Agora não sei esta informação do comando ulimit é correta. Abaixo segue o código que eu fiz para forçar o erro:


This message was edited 2 times. Last update was at 17/12/2009 16:19:14


www.bau-de-dev.com
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Jedi_FeniX wrote: Achei este comando "ulimit -a" que fala que open files na máquina tem o máximo de 1024.
Então fiz um java simples que só ficava abrindo arquivos e contando quanto arquivos eu abri e consegui chegar a 4200 ...

Hum... você deveria ter acumulado esses BufferedReaders em um List<>, porque do jeito que você fez o Garbage Collector (Finalizer) pode até ter fechado alguns desses arquivos.

This message was edited 1 time. Last update was at 17/12/2009 16:32:13

euprogramador
Debugger
[Avatar]
Membro desde: 21/07/2009 06:57:53
Mensagens: 71
Localização: Brasília - DF
Offline

Pessoal funciona assim, o windows tem um limite para as portas abertas, já passei por este problema ao construir um antispam, nos testes eu testava até 1000 tudo ok, mas 5000 já não dava, para funcionar você tem que alterar o registro do windows. agora só não me lembro onde.

Dicas sobre Java, SQL, Desenvolvimento, Padrões de Projeto e afins...
progdicas.blogspot.com
euprogramador
Debugger
[Avatar]
Membro desde: 21/07/2009 06:57:53
Mensagens: 71
Localização: Brasília - DF
Offline

tem aqui para o windows 7 e xp

http://pplware.sapo.pt/2009/04/17/windows-7-remover-limite-conexoes-tcpip/

http://www.babooforum.com.br/forum/index.php?showtopic=240248

aqui tem mais informações.

This message was edited 1 time. Last update was at 17/12/2009 16:45:10


Dicas sobre Java, SQL, Desenvolvimento, Padrões de Projeto e afins...
progdicas.blogspot.com
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Estou usando linux...

entanglement vou fazer um arquivo para ficar abrindo conexões com um servidor no mesmo estilo no de cima e ver o que acontece.

This message was edited 1 time. Last update was at 17/12/2009 17:02:43


www.bau-de-dev.com
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team