2012-11-28 54 views
2

我知道这已被问了很多次,但我坚持了它。通信链接失败:使用C3P0重置连接

我验证了以下几件事:

IP address or hostname in JDBC URL is correct. 

Hostname in JDBC URL is also recognized by local DNS server. 

Port number is correct in JDBC URL. 

DB server is up. 

由于相同的DB调用工作有时,我相信它与相关“走出联系”。我们在发行时只有50-60 connections给DB。

不过,我相信C3PO connections可能已经用尽了。

我们有以下C3P0配置

<props> 
<prop key="hibernate.c3p0.timeout"> 
44000 
<!-- seconds --> 
</prop> 
<prop key="hibernate.c3p0.min_size">5</prop> 
<prop key="hibernate.c3p0.max_size">5</prop> 
<prop key="hibernate.c3p0.initial_pool_size">5</prop> 
<prop key="hibernate.c3p0.idle_test_period"> 
60 
<!-- seconds --> 
</prop> 
<prop key="hibernate.c3p0.acquire_increment">2</prop> 
<prop key="hibernate.c3p0.max_statements">50</prop> 
<prop key="hibernate.c3p0.preferredTestQuery">SELECT 1 FROM DUAL</prop> 
<prop key="hibernate.show_sql">true</prop> 
</props> 

大多数条目在这里没有定义,默认情况下被使用。让我知道这是否是问题,理由会非常有帮助。

Maximum number C3P0 connections by default are 15但是我们几乎总是越过这个限制,并且不会遇到这个问题(同样可能是C3P0的acquireIncrement属性在这种情况下支持连接)。

堆栈跟踪:

org.springframework.dao.DataAccessResourceFailureException: could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query 
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:625) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.convertHibernateAccessException(AbstractSessionFactoryBean.java:303) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.translateExceptionIfPossible(AbstractSessionFactoryBean.java:282) 
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58) 
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy34.findByName(Unknown Source) 
at a.b.c.d.e.f(A.java:941) 
at a.b.c.d.e.f$$FastClassByCGLIB$$a171eb15.invoke(&lt;generated&gt;) 
at org.springframework.internal.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
at com.amazon.mobiusdatabase.activity.IMBatchActivity$$EnhancerByCGLIB$$42d90986.getLatestBatchByStatus(&lt;generated&gt;) 
at com.amazon.coral.reflect.$2198.invoke(Unknown Source) 
at com.amazon.coral.service.DefaultActivityInvoker.invoke(DefaultActivityInvoker.java:40) 
at com.amazon.coral.service.ContinuationActivityInvokerFactory$1.invoke(ContinuationActivityInvokerFactory.java:92) 
at com.amazon.coral.service.ActivityHandler.invoke(ActivityHandler.java:269) 
at com.amazon.coral.service.ActivityHandler.before(ActivityHandler.java:157) 
at com.amazon.coral.service.TransmutingContinuationHandler.before(TransmutingContinuationHandler.java:51) 
at com.amazon.coral.service.Chain.componenteBefore(Chain.java:98) 
at com.amazon.coral.service.Chain.before(Chain.java:76) 
at com.amazon.coral.service.helper.ChainHelper.before(ChainHelper.java:103) 
at com.amazon.coral.service.AbstractOrchestrator.doWork(AbstractOrchestrator.java:60) 
at com.amazon.coral.service.PassiveOrchestrator.enqueue(PassiveOrchestrator.java:68) 
at com.amazon.coral.service.GracefulShutdownOrchestrator.enqueue(GracefulShutdownOrchestrator.java:79) 
at com.amazon.coral.service.helper.OrchestratorHelper.enqueue(OrchestratorHelper.java:44) 
at com.amazon.coral.service.batch.BatchProtocolOrchestrator.enqueue(BatchProtocolOrchestrator.java:97) 
at com.amazon.coral.service.bobcat.BobcatEndpoint.invoke(BobcatEndpoint.java:194) 
at org.apache.catalina.valves.SSLValve.invoke(SSLValve.java:113) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:894) 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:719) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2101) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: org.hibernate.exception.JDBCConnectionException: could not execute query 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

Last packet sent to the server was 1 ms ago. 
at sun.reflect.GeneratedConstructorAccessor143.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2985) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885) 
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1808) 
at org.hibernate.loader.Loader.doQuery(Loader.java:697) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
at org.hibernate.loader.Loader.doList(Loader.java:2228) 
... 49 more 
Caused by: java.net.SocketException: Connection reset 
at java.net.SocketInputStream.read(SocketInputStream.java:168) 
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113) 
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160) 
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188) 
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2428) 

我们正在这一点的同时开火DB选择查询。

+0

嗨。目前还不清楚你在问什么问题。您是否看到“通信链接失败:连接重置”等异常,或者您是否面临池耗尽,即试图检出连接冻结,无限期地等待不出现的连接?如果您看到异常,那么给堆栈跟踪并提供一些有关发生异常情况的信息可能会很好。 –

+0

另请注意,在此配置中,不应有15个连接由c3p0池管理,但固定数量只有5个。如果您看到15个,则可能正在初始化3个池(不同的c3p0 DataSources或使用的一个DataSource –

+0

我们正在收到“通信链路故障:连接重置”。更新了问题 – instanceOfObject

回答

1

也许连接没有正确关闭,所以你可以尝试大幅度减少超时,看看你是否有同样的问题。

<prop key="hibernate.c3p0.timeout">3000</prop> 

同时,你可以使用JMX探查像VisualVM监视C3P0连接,并直接看到在数据库服务器上是否有“丢失”的连接。

相关问题