java.sql.SQLRecoverableException: IO Error: Connection reset error

当应用程序正在运行时,在一定时间间隔后,读/写 SQL 查询将由于 java.sql.SQLRecoverableException: IO Error: Connection reset 错误而失败。

症状

以下是堆栈跟踪的示例:
2017-12-06 20:02:49,711 [sch_worker_0] ERROR
com.ibm.ccd.common.db.Query JOB_ID:2203- CWPCM0040E:The query
failed : [ Static Query [name:
GEN_DOC_DHI_DOC_HIERARCHY_GETBYPATH]
[id: 681]
SELECT *
FROM tdoc_dhi_doc_hierarchy
WHERE dhi_cmp_id = 1
  AND dhi_doc_path = '/scripts/reports/Matt report'], Exception:IO Error: Connection reset
java.sql.SQLRecoverableException: IO Error: Connection reset
     at
oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:790)
     at
oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925)
     at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111)
     at
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
     at
oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845)
     at
oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501)
     at
org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
     at
org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
     at com.ibm.ccd.common.db.Query.execute(Query.java:982)
     at com.ibm.ccd.common.db.Query.execute(Query.java:858)
     at com.ibm.ccd.common.db.Query.execute(Query.java:824)
     at com.ibm.ccd.common.db.Query.execute(Query.java:806)
     at
com.ibm.ccd.common.gendb.GenDocDhiDocHierarchyTable.getByPath(GenDocDhiDocHierarchyTable.java:615)
     at com.ibm.ccd.docstore.common.Doc$3.run(Doc.java:423)
     at
com.ibm.ccd.common.context.common.DBContext.runInNewDBContext(DBContext.java:1392)
     at com.ibm.ccd.docstore.common.Doc.get(Doc.java:418)
     at
com.ibm.ccd.docstore.common.DocStoreMgr.get(DocStoreMgr.java:67)
     at
com.ibm.ccd.docstore.common.DocStoreMgr.get(DocStoreMgr.java:62)
     at
com.ibm.ccd.docstore.common.DocStoreMgr.get(DocStoreMgr.java:54)
     at com.ibm.ccd.report.common.Report.<init>(Report.java:105)
     at
com.ibm.ccd.report.common.ReportMgr.buildReport(ReportMgr.java:64)
     at
com.ibm.ccd.report.common.ReportMgr.buildReport(ReportMgr.java:79)
     at
com.ibm.ccd.report.common.ReportMgr.getReportById(ReportMgr.java:106)
     at
com.ibm.ccd.report.common.ReportExe.execute(ReportExe.java:97)
     at
com.ibm.ccd.scheduler.threads.SchedulerThread.fuzaoRun(SchedulerThread.java:262)
     at
com.ibm.ccd.common.util.FuzaoRunnableAdapter.run(FuzaoRunnableAdapter.java:54)
     at
com.ibm.ccd.common.util.FuzaoThread.run(FuzaoThread.java:123)
Caused by: java.net.SocketException: Connection reset

原因

连接复位,数据库连接脱落可受网络影响。

解决问题

网络管理员可以检查以下内容:
  1. 请检查是否存在可导致连接下降的负载均衡器或网关。
  2. 运行从应用程序服务器到数据库服务器的跟踪路由命令,以检查是否有任何中继段来自负载均衡。
  3. 使用针对 VLAN 或网络下的网关的 netstat -rn 命令来检查网络统计信息。