| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 03:27:52
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 08:20:49
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 08:57:08
|
bezier curve
JavaEvangelist
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 16:17:20
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 16:32:00
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 16:41:26
|
euprogramador
Debugger
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 16:44:51
|
euprogramador
Debugger
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2009 17:02:24
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
|
|