| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2010 15:08:23
|
dmaguiar
What is classpath?
Membro desde: 09/02/2010 12:24:10
Mensagens: 5
Offline
|
Erro fatal:
java.sql.SQLException: Network error IOException: Connection timed out
Na empresa na qual trabalho temos um sistema web multi-database, temos um problema grave que nem consultor está conseguindo resolver, a pessoal rede fala que é aplicação e o DBA também, já viu né.
Atualmente o esquema de conexão é a seguinte.
Hibernate + c3po
Tudo é montado dinamicamente: +- assim
private Properties getClienteProperties(ConfiguracaoCliente config) {
Properties retorno = new Properties();
retorno.put("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
retorno.put("hibernate.c3p0.acquire_increment", "1");
retorno.put("hibernate.c3p0.idle_test_period", "180");
retorno.put("hibernate.c3p0.max_size", "300");
retorno.put("hibernate.c3p0.max_statements", "100");
retorno.put("hibernate.c3p0.min_size", "0");
retorno.put("hibernate.c3p0.checkoutTimeout","1");
retorno.put("hibernate.c3p0.timeout", "120");
retorno.put("hibernate.c3p0.initialPoolSize","0");
retorno.put("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver");
retorno.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
retorno.put("hibernate.connection.password", config.getSenha());
retorno.put("hibernate.connection.username", config.getUsuario());
retorno.put("hibernate.use_sql_comments", "false");
retorno.put("hibernate.connection.url", "jdbc:jtds:sqlserver://" + config.getIp() + "/" + config.getDatabase());
retorno.put("hibernate.current_session_context_class", "org.hibernate.context.ThreadLocalSessionContext");
if (show_sql) {
retorno.put("hibernate.show_sql", "true");
} else {
retorno.put("hibernate.show_sql", "false");
}
return retorno;
}
o método que chama:
private SessionFactory buildSession(ConfiguracaoCliente cliente) {
SessionFactory sessaoF = null;
/*if (existeDatabase(cliente)) {*/
Configuration configuration = getConfiguration(cliente);
configuration.addProperties(getClienteProperties(cliente));
try {
sessaoF = configuration.buildSessionFactory();
} catch (HibernateException e) {
Logger.getLogger(ConexaoFacade.class.getName()).log(Level.SEVERE, null, e);
}
/*
} else {
System.out.println("Database " + cliente.getDatabase() + " não existe no servidor: " + ipPadrao);
}*/
return sessaoF;
}
A aplicação vai numa boa roda as vezes dias... e deRepete !!!!!!!
//////////////*************
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main] -- caught unexpected Exception while executing posted task.
java.lang.NullPointerException
java.sql.SQLException: Network error IOException: Connection timed out
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:372)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:17
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:6
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:87)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1.acquireResource(C3P0PooledConnectionPool.java:83)
at com.mchange.v2.resourcepool.BasicResourcePool.assimilateResource(BasicResourcePool.java:884)
at com.mchange.v2.resourcepool.BasicResourcePool.acquireUntil(BasicResourcePool.java:601)
at com.mchange.v2.resourcepool.BasicResourcePool.access$400(BasicResourcePool.java:31)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1079)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1298.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:289)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:250)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:297)
... 10 more
java.sql.SQLException: Network error IOException: Connection timed out
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:372)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:17
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:6
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:87)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1.acquireResource(C3P0PooledConnectionPool.java:83)
at com.mchange.v2.resourcepool.BasicResourcePool.assimilateResource(BasicResourcePool.java:884)
at com.mchange.v2.resourcepool.BasicResourcePool.acquireUntil(BasicResourcePool.java:601)
at com.mchange.v2.resourcepool.BasicResourcePool.access$400(BasicResourcePool.java:31)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1079)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:354)
//////////////*************
O servidor trava... essa aplicação e outras que estão no mesmo servidor travam!!!
Algum guru...
É urgente mesmo...
Valeu!!!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2010 16:07:10
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Quando for postar códigos, use a tag code:
[code]
Seu código aqui
[/code]
Não poste tópicos com títulos contendo as palavras "URGENTE, SOCORRO, AJUDA, etc..."
Conexões ficam abertas por muito tempo no pool. Isso faz com que o servidor de BD as feche por ociosidade. Não adianta mudar os timeouts do servidor, pois ele poderá fechar conexões abaixo desse timeout caso esteja carregado.
Para prevenir esse problema, habilite o teste de conexão do C3P0.
http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing
Ele irá rodar uma consulta boba no seu banco (como SELECT 1; ) antes de entregar uma conexão, só para ter certeza de que ela ainda está funcionando. Se não estiver, o próprio pool a reciclará.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2010 16:14:12
|
dmaguiar
What is classpath?
Membro desde: 09/02/2010 12:24:10
Mensagens: 5
Offline
|
Vou colocar isso no deploy hj a noite e aguardar alguns dias pra ver se a aplicação cairá... pq como disse o erro acontece de 1 dia ou até uma semana.
Muito obrigado mesmo, valeu pela força!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2010 18:21:39
|
dmaguiar
What is classpath?
Membro desde: 09/02/2010 12:24:10
Mensagens: 5
Offline
|
Fiz uns testes aqui com as propriedades
hibernate.c3p0.idleConnectionTestPeriod mas ele depende da propriedade hibernate.c3p0.timeout (logicamente) ou seja...
a configuração atual do servidor é 1 de connection timeout, propositalmente para descartar locks de conexão, cada conexão não utilizada em 1 segundo e fechada com, forçando o c3po a utilizar novas conexões, e ainda sim não deu certo.
No momento do colapso da aplicação fiz uma verificação junto com o DBA no auditoria R2 do sqlServer constata-se que o pedido de conexão chega ao servidor mas é fechado em instantes, a aplicação fica incomunicavel mas o sql continua recebendo conexões que não sejam do servidor (tomcat) em questão.
Mistério...
A aplicçaão já está pronta para utilizar JNDI, falta criar os arquivos JNDI no servidor cerca de 150, uma migração para JBOSS + JNDI está prevista e está sendo protelada justamente por este mistério, não quero migrar sem descobrir o erro, estou ficando sem alternativas.Vlws.
Vlws...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 09:58:06
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
Pra melhorar o diagnostico, tente mudar o log4j para imprimir mais dados sobre as conexoes. Por exemplo, tente usar um "INFO". Mas tome cuidado e tente usar um file roller, pq eh possivel que o seu log cresca muito
Algum motivo por estarem usando um "acquire_increment" de 1 ? Eu colocaria um acquire_increment de uns 3, ja que vc provavelmente vai usar (se sua aplicacao for razoavelmente usada).
E "initialPoolSize", tem motivo para estar 0 ? Eu deixaria com uns 10, considerando que vc tem 300 como max_size.
O max_size, inclusive, me parece um pouco algo. Quantos usuarios simultaneos vc espera na sua aplicacao?
O servidor trava... essa aplicação e outras que estão no mesmo servidor travam!!!
O que significa "o servidor trava"? O servidor nao responde mais a ping?
|
http://www.google.com/profiles/partenon |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:26:40
|
dmaguiar
What is classpath?
Membro desde: 09/02/2010 12:24:10
Mensagens: 5
Offline
|
A aplicação fica repetindo "java.sql.SQLException: Network error IOException: Connection timed out" e a aplicação via browser não funciona.
A impressão é que o tomcat trava mas o log diz que não, não apresenta java heap space nem nada, somente o erro acima citado.
Fico desconfiado do firewall... será que teria possibilidade?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:34:15
|
dmaguiar
What is classpath?
Membro desde: 09/02/2010 12:24:10
Mensagens: 5
Offline
|
essa configuração atual do c3po não é a de produção real, ela está no momento em produção para forçar sempre novas conexões, porque o erro já acontecia com a configuração a seguir:
retorno.put("hibernate.c3p0.acquire_increment", "5");
retorno.put("hibernate.c3p0.idle_test_period", "180");
retorno.put("hibernate.c3p0.max_size", "200");
retorno.put("hibernate.c3p0.max_statements", "100");
retorno.put("hibernate.c3p0.min_size", "5");
retorno.put("hibernate.c3p0.checkoutTimeout","0");
retorno.put("hibernate.c3p0.timeout", "1800");
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:34:48
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
A aplicação fica repetindo "java.sql.SQLException: Network error IOException: Connection timed out"
Isso significa que o C3P0 fica tentando buscar uma conexao, mas nao consegue. Dai tenta de novo, e nao consegue. E por ai vai. Se voce acha que o problema eh de rede, voce pode fazer um "cron" que roda de minuto em minuto para checar seu log. Se o problema esta acontecendo, comeca a gravar "pings" do servidor onde esta sua aplicacao para o servidor de banco de dados. Estes pings podem ser tanto o comando "ping" quanto uma aplicacao Java "standalone" que faz uma conexao na mao com o banco de dados (sem usar connection pooling). Se o ping funcionar, nao eh rede
|
http://www.google.com/profiles/partenon |
|
|
 |
|
|
|
|