| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2009 08:30:53
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Bom dia!
Tenho uma rotina que roda de tempos em tempos, processando uma fila de tarefas. A cada tarefa que ela processa, eu conecto no BD, processo o que preciso e desconecto. Sei que a rotina está perfeita, funciona bem sem problemas. Tenho inclusive clientes em uso já com essa rotina, em MySQL.
Acontece que nosso sistema roda com vários BDs, e agora estava eu testando tudo pq um cliente passará a usar essa mesma rotina, mas com SQLServer. E com SQLServer eu tive um problema, durante a execução da rotina, ele funciona bem por um tempo e de repente dá a seguinte mensagem de erro justamente no momento em que tenta fazer uma conexão com o BD:
STACK TRACE:
java.sql.SQLException: Network error IOException: Address already in use: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:385)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:182)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
Pesquisei e descobri que esse erro se refere ao fato de a máquina não ter nenhuma porta disponível para usar para conectar com o BD. Então eu fui no prompt do MS-DOS, e dei o famoso comando "netstat". Qual foi minha surpresa quando vi uma lista enorme de portas abertas com o IP do meu servidor de dados SQLServer! Praticamente todas no estado TIME_WAIT. Fechei todo o sistema, percebi que não muda nada... então fiquei olhando e notei que ele tem uma espécie de "tempo" pra liberar as portas que estão como TIME_WAIT, ou seja, não estão mais sendo usadas, mas também não foram liberadas ainda pelo windows. Elas ficam ali, "esperando dar seu tempo".
Depois de um tempo vi que todas as TIME_WAIT foram liberadas, ai rodo o sistema e tudo funciona normalmente até estourar o limite de portas mais uma vez.
Por favor, eu uso o sistema com MySQL, Oracle e SQLServer. Até agora, só o SQLServer apresentou essa situação. Alguém sabe o que posso fazer? Algo que eu possa fazer pra forçar o Windows a liberar essa porta que não estou mais usando já no ato da desconexão com o BD?
Grata,
Renata
This message was edited 1 time. Last update was at 07/10/2009 14:56:23
|
[]'s, Renata |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2009 09:53:34
|
Thiago MuiLoko
JavaBaby
![[Avatar]](/images/avatar/d008c4bd0ec9a4556d12053f96cc54b8.jpg)
Membro desde: 01/07/2009 07:42:12
Mensagens: 82
Offline
|
Realmente, se vc não fechar elas vão ficar abertas mesmo.
Utiliza um bloco finally e utilize o comando close(), exemplo
Da uma olhada na APi que tem os esquemas de fechar.
Espero ter ajudado,
Abs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2009 10:00:23
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Amigo, acho que vc não entendeu. Não são minhas conexões que ficam abertas, eu as fecho, isso está ok!
O que fica aberta são as portas do windows, ficam abertas naquele status TIME_WAIT, ou seja, não estão mais sendo usadas (justamente pq fechei minhas conexão), mas tb não foram liberadas. E isso só com o SQLServer.
Alguma idéia?
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2009 10:33:34
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
http://mail-archives.apache.org/mod_mbox/activemq-users/200607.mbox/%3C4e6f67720607140610x741ea7a6xddc5125293bb3429@mail.gmail.com%3E
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/09/2009 13:11:04
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Olá!
Eu dei uma olhada no link que vc me passou, não entendi ao certo. Me deu a impressão de que é uma forma de "melhorar o problema", não de resolvê-lo definitivamente.
Como faço pra testar? Isso é um daqueles drivers que eu tenho que baixar e atualizar o servidor de dados não é? Tenho um conhecido aqui que disse que já tentou e que não foi bom usando esse driver, então estou bem enrolada sobre o que fazer.
Alguns dados:
Uso SQLServer 2005 e jtds-1.2.3.jar
Grata,
Renata
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2009 14:56:33
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Olá amigos!
Ngn mais se manifestou, mas meu problema ainda não foi resolvido, então estou aqui, "gritando" denovo...
Consegui observar mais alguns detalhes que talvez ajude a resolver. O fato é que rodei a mesma rotina, acessando o mesmo banco de dados, de máquinas diferentes e observei que só na minha máquina ocorre o problema!
O SQLServer 2005 está instalado em um servidor com Windows Server 2003.
Eu testei de uma máquina Windows Server 2008 Standard e testei de uma máquina com Windows Vista. Em ambas funcionou normalmente. Só na minha máquina que ocorre o problema. Minha máquina é um Windows XP Professional SP 3.
Isso ajuda em algo?
Grata,
Renata
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 08:36:37
|
clone_zealot
JavaEvangelist
Membro desde: 21/11/2004 16:40:00
Mensagens: 424
Offline
|
Bem, o que eu posso te ajudar é com informações.
O Windows Vista, assim como o Server, têm uma nova implementação da pilha TCP. Isso pode ser a resposta do pq funciona no Vista e no Server, mas não no XP.
O que posso te indicar é testar isso em uma outra máquina com o Windows XP.
|
"Não amo a espada por sua agudez,
não amo a flecha por sua rapidez,
não amo o homem por sua glória,
amo sim, tudo o que eles defendem"
Faramir, Príncipe de Ithilien |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 08:44:21
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Hum... deve haver algum parâmetro no registry do Windows XP que permita que o TIME_WAIT fique por menos tempo ativo e "simule" esse comportamento do Vista e Server 2008.. Pelo que vi, o parâmetro é TcpTimedWaitDelay:
http://support.microsoft.com/kb/328476
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 14:10:47
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Ei amigo, li o link que vc passou, tá com kra de que isso resolve meu problema hein!
Só me ajudem com mais uma coisa... onde eu posso alterar o valor de MaxUserPort e TcpTimedWaitDelay?
Não entendi onde eu entro pra alterar esses valores. Alguém sabe?
Grata
Renata
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 14:22:35
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Acho que encontrei! Para alterar o TcpTimedWaitDelay, sigam as dicas:
(procure por TcpTimedWaitDelay)
http://arenammo.com.br/forums/aion/45271-melhorando-conexao.html
http://www.secret.com.br/phpBB2/viewtopic.php?t=232763&sid=5f7433de82801b64b26682e2f21e689b
Depois é reiniciar e testar.
Vou fazer isso, depois conto se deu certo.
Até já!
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 14:55:23
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
TESTADO!!!
Funciona msm! Era isso, agora ele não fica tanto tempo segurando a porta de conexão e não esgota as portas. Muito bom gente!!!
Só seguir as dicas que funciona.
Obrigada pela ajuda de todos!
|
[]'s, Renata |
|
|
 |
|
|