7
回答
关于数据库连接的一个错误:Communications link failure
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

最近在一个日企进行开发。日本拿过来的项目中运行就会出现异常。

[org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:798)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3700)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1203)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2572)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:172)
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:619)
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:264)
    at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:575)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:347)
    at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:330)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:402)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849)
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)
    at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.tx.BMTInterceptor.handleStateless(BMTInterceptor.java:71)
    at org.jboss.ejb3.tx.BMTInterceptor.invoke(BMTInterceptor.java:131)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
    at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304)
    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
    at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:809)
    at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:608)
    at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:420)
    at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:173)


** END NESTED EXCEPTION **



Last packet sent to the server was 22 ms ago.)

 

好像是隔一天就会出现一次。请大家帮忙看看为什么?运行的软件好像是jboss

举报
Communications link failure 这样的错误一般发生在打开数据库连接后,等好久才进行数据库操作,导致mysql认为这个连接超时无效,解决的办法要么是提高mysql端的timeout 设置,要么是降低连接池这边的timeout值

引用来自“红薯”的答案

Communications link failure 这样的错误一般发生在打开数据库连接后,等好久才进行数据库操作,导致mysql认为这个连接超时无效,解决的办法要么是提高mysql端的timeout 设置,要么是降低连接池这边的timeout值

可是这样的问题还是会出现。我们试着将mysql的timeout值改成了48小时结果还是不行。

--- 共有 7 条评论 ---
红薯回复 @幸福的晚来秋 : 这个问题不会影响连接池的其他连接,我估计你的系统有其他问题,这个问题只是假象 6年前 回复
幸福的晚来秋回复 @红薯 : 如果这个问题不解决每隔一天都需要重启动服务,界面全部卡死在那里了。最后抛出这些异常,好像都是锁死了! 6年前 回复
幸福的晚来秋回复 @红薯 : 设置成了48小时应该没问题啊。不知道为什么还出现这个问题 因为最小连接数设置到了5 最大连接数为100! 感觉应该足够了啊 因为我们这边每天都会有翻译进行录入数据的。最大空闲时间没有超过12小时的! 6年前 回复
幸福的晚来秋回复 @红薯 : 隔一天有时候两天。 如果用了c3p0就不会出现问题。好像他们日本用了jboss的连接池 6年前 回复
红薯回复 @幸福的晚来秋 : 隔一天出现一次,这不算是总发生 6年前 回复

用了连接池吧,mysql那边断掉了连接吧,GP的MySql就是这样,到最后不用连接池,倒没这个问题了。它就不鼓励长连接的。
看看能在连接字串后面加?autoReconnect=true&failOverReadOnly=false不,不过这招也不是万能的,c3p0有检测连接有效性的设置吧。

你可将连接池中的连接的空闲时间进一步降低,要比 mysql 的 timeout 值更低
--- 共有 2 条评论 ---
红薯回复 @幸福的晚来秋 : 池的连接空闲时间跟数据库的是不同的,一般连接池都有这项的配置 6年前 回复
幸福的晚来秋请教红薯,池的大概意思是这样吗? 最小连接数。最大连接数。如果有一个连接空闲时间超过了48小时。就会与数据库断开。就会抛出那个异常? 如果48小时之内有人用了它,就没反应了吗? 6年前 回复

解决“由于潜在的异常导致通信链路故障”:原来是我的tomcat服务器有两个项目,一个连接本地数据库,一个连接远程数据库,由于本地数据库没有启动,所以启动tomcat服务器时,就报com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception通信链路故障,当我启动本地mysql数据库时,再没报这个异常

--- 共有 1 条评论 ---
花间小酌是在Mysql一直启动的时候,报的错误。看上面大神们的回复,应该是连接超时的问题 5个月前 回复
顶部