java.sql.SQLRecoverableException: IO 错误: Socket closed

   今天weblogic的alllog日志报了很多socket closed的错误。

### Cause: org.hibernate.exception.JDBCConnectionException: IO 错误: Socket closed

at com.gg.corm.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:59) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.sproc.core.base.dao.MyBatisDAO$6.execute(MyBatisDAO.java:241) ~[sproc-core-1.3.1-20141225.jar:1.3.1-20141225]
at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:54) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.internal.SessionImpl$2.accept(SessionImpl.java:1936) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.internal.SessionImpl$2.accept(SessionImpl.java:1933) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:211) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:1954) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:1940) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at com.gg.sproc.core.base.dao.MyBatisDAO.getObject(MyBatisDAO.java:236) ~[sproc-core-1.3.1-20141225.jar:1.3.1-20141225]
... 75 common frames omitted
Caused by: org.hibernate.exception.JDBCConnectionException: IO 错误: Socket closed
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:131) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at com.sun.proxy.$Proxy250.execute(Unknown Source) ~[na:na]
at com.gg.corm.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:56) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:70) ~[gg-top-corm-3.1.2-20141209.jar:na]
at sun.reflect.GeneratedMethodAccessor197.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_40]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_40]
at com.gg.corm.plugin.Plugin.invoke(Plugin.java:59) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.sun.proxy.$Proxy234.query(Unknown Source) ~[na:na]
at com.gg.corm.executor.SimpleExecutor.doQuery(SimpleExecutor.java:69) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.executor.BaseExecutor.query(BaseExecutor.java:141) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.executor.CachingExecutor.query(CachingExecutor.java:105) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.executor.CachingExecutor.query(CachingExecutor.java:81) ~[gg-top-corm-3.1.2-20141209.jar:na]
at com.gg.corm.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101) ~[gg-top-corm-3.1.2-20141209.jar:na]
... 85 common frames omitted
Caused by: java.sql.SQLRecoverableException: IO 错误: Socket closed
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:897) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3594) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3695) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378) ~[ojdbc6.jar:11.2.0.3.0]
at weblogic.jdbc.wrapper.PreparedStatement.execute(PreparedStatement.java:101) ~[weblogic.server.merged.jar:12.1.2.0.0]
at sun.reflect.GeneratedMethodAccessor695.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_40]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_40]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ~[com.gg.top.thirdparty-hibernate-core-4.1.9.Final.jar:4.1.9.Final]
... 100 common frames omitted
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.7.0_40]
at java.net.SocketInputStream.read(SocketInputStream.java:152) ~[na:1.7.0_40]
at java.net.SocketInputStream.read(SocketInputStream.java:122) ~[na:1.7.0_40]
at oracle.net.ns.Packet.receive(Packet.java:300) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.net.ns.DataPacket.receive(DataPacket.java:106) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.net.ns.NetInputStream.read(NetInputStream.java:260) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.net.ns.NetInputStream.read(NetInputStream.java:185) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.net.ns.NetInputStream.read(NetInputStream.java:102) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) ~[ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884) ~[ojdbc6.jar:11.2.0.3.0]

... 110 common frames omitted

再检查server日志,发现在alllog中报socket closed错误的时段:

####<2015-1-5 上午11时37分22秒 CST> <Info> <JDBC> <scgg15140> <appServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1420429042060> <BEA-001128> <Connection for pool "ggDataSource" has been closed.> 
####<2015-1-5 上午11时38分32秒 CST> <Info> <JDBC> <scgg15140> <appServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1420429112057> <BEA-001128> <Connection for pool "ggDataSource" has been closed.> 
####<2015-1-5 上午11时38分52秒 CST> <Info> <JDBC> <scgg15140> <appServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1420429132057> <BEA-001128> <Connection for pool "ggDataSource" has been closed.> 
####<2015-1-5 上午11时51分32秒 CST> <Info> <JDBC> <scgg15140> <appServer> <[ACTIVE] ExecuteThread: '13' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1420429892057> <BEA-001128> <Connection for pool "ggDataSource" has been closed.> 


连接池关闭,连接池为甚关闭呢?在此时间段只有一条SQL报错,为什么不是大规模的报错呢?

与一名开发人员反馈,说每次都可以出现,于是找他重现。在16点到17点重现了,但在17点到18点又重现不了,我无意识的看了两个时段的AWR报告,发现有报错时段的SQL执行时37s,没有报错时段的SQL执行是2s。

我怀疑与非活动连接超时这个参数有关系,于是找了一个功能为120s的,做了个测试:

非活动连接超时等待多少秒后报错
1      20s
5      16s
10     40s
15     不报错,等待120s后功能出来了
  30     同上
50     同上

总结:治标的调大非活动连接超时这个参数,治本的方法是调优SQL。

A leaked connection is a connection that was not properly returned to the connection pool in the data source. To automatically recover leaked connections, you can specify a value for Inactive Connection Timeouton the JDBC Data Source: Configuration: Connection Pool page in the Administration Console. When you set a value for Inactive Connection Timeout, WebLogic Server forcibly returns a connection to the data source when there is no activity on a reserved connection for the number of seconds that you specify. When set to 0 (the default value), this feature is turned off.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误Java数据库连接时发生的错误,通常是由于网络问题或数据库服务器故障引起的。具体的错误信息是“java.sql.sqlrecoverableexception: io 错误: undefined error”。 可能的解决方法包括检查网络连接是否正常、检查数据库服务器是否正常运行、检查数据库连接参数是否正确等。如果问题仍然存在,可以尝试重新启动数据库服务器或联系数据库管理员寻求帮助。 ### 回答2: java.sql.sqlrecoverableexception: io错误: undefined error,意味着Java程序在试图与数据库建立连接或进行数据库操作时出现了无法恢复的错误,导致连接断开或操作失败。 这个错误可能由多种原因引起,其中一些常见的因素包括: 1. 数据库服务器宕机或故障。如果数据库服务器出现故障或停机,Java程序无法访问数据库,就会出现这个错误。检查一下数据库服务器是否正常运行,并尝试重新连接数据库。 2. 网络连接故障。如果网络连接存在问题,可能会导致Java程序无法与数据库进行通信,从而导致io错误。请检查网络连接是否正常,例如,尝试使用ping命令测试数据库服务器是否可达。 3. 数据库连接池配置错误。如果连接池配置不正确,可能会导致连接超时或泄漏,从而导致无法恢复的错误。检查一下连接池配置是否正确,并尝试改变参数值以解决问题。 4. 应用程序代码错误。如果应用程序代码存在问题,例如使用了错误SQL语句或参数,可能会导致无法恢复的错误。检查一下应用程序代码是否正确,并尝试修复或重写代码。 无论是哪种原因导致了这个错误,都需要仔细检查并修复问题,以确保Java程序能够与数据库顺利通信。如果无法自行解决问题,可以寻求专业技术人员的帮助。 ### 回答3: java.sql.sqlrecoverableexception: io 错误: undefined errorJava 中一个常见的异常错误,这个错误通常是由于数据库连接超时或者数据库服务器无响应而导致的。 在 Java 中,程序通过 JDBC 来实现与数据库的连接和数据交互。当程序尝试连接数据库时,它会发出一个请求并等待数据库服务器响应。如果该请求长时间未得到响应或者网络连接断开,就会出现 io 错误: undefined error 异常。 通常,在出现这种异常时,我们需要检查以下几个方面: 1. 数据库服务器是否正常运行:我们需要检查数据库服务器是否已经启动并正在运行,并且可以通过正确的端口访问。如果无法访问,则可能是因为服务器故障或网络问题。 2. 数据库连接超时设置:有时候,数据库连接需要一定的时间才能建立,而程序可能在这之前就已经超时了。为了解决这个问题,我们可以增加 JDBC 连接的超时设置。 3. 数据库访问权限:如果数据库连接成功了,但是程序无法进行数据访问,那么可能是因为程序没有足够的访问权限。我们需要检查数据库用户的权限是否正确。 4. 确认 JDBC 驱动版本是否正确:有时候不同版本的 JDBC 驱动程序之间会出现一些不兼容的问题,这也可能导致 io 错误: undefined error 异常。 总之,当出现 java.sql.sqlrecoverableexception: io 错误: undefined error 异常时,我们需要全面检查相关问题,确定究其原因,以便尽快解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值