Connection timed out, URGENTE.  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
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!!!
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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!
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...
partenon
JavaChild
[Avatar]
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
[WWW]
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?
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");
partenon
JavaChild
[Avatar]
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
[WWW]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team