首页 > 解决方案 > Weblogic - Oracle DB - SQLException - 已经为线程安排了中断任务 - 类型为 SO_TIMEOUT

问题描述

在尝试连接到 Oracle DB 并执行查询时,我们经常遇到错误。这会导致“无法获得连接错误”。发生这种情况时,数据源的Failed Reserve Request Count也会增加。我们不确定这是由于网络问题还是数据库问题JDBC 驱动程序问题

and the type SO_TIMEOUT

我们甚至增加了连接池大小和 ulimit 数量。看起来错误的发生减少了,但它又回来了。

知道问题可能出在哪里吗?提前致谢。

Caused by: java.sql.SQLException: weblogic.common.resourcepool.ResourceDeadException: Interrupt task is already scheduled for the thread Thread[[ACTIVE] ExecuteThread: '87' for queue: 
'weblogic.kernel.Default (self-tuning)',5,Pooled Threads] and the type SO_TIMEOUT
    at weblogic.common.resourcepool.ResourcePoolImpl.checkAndReturnResource(ResourcePoolImpl.java:1865)
    at weblogic.common.resourcepool.ResourcePoolImpl.checkAndReturnResource(ResourcePoolImpl.java:1795)
    at weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:428)
    at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:360)
    at weblogic.jdbc.common.internal.HAConnectionPool.reserve(HAConnectionPool.java:351)
    at weblogic.jdbc.common.internal.HAConnectionPool.reserve(HAConnectionPool.java:242)
    at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:148)
    at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:94)
    at weblogic.jdbc.jta.DataSource.getXAConnectionFromPool(DataSource.java:1902)
    at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1609)
    at weblogic.jdbc.jta.DataSource.getConnectionInternal(DataSource.java:520)
    at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:497)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:614)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:594)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:587)
    at com.ibatis.sqlmap.engine.transaction.jta.JtaTransaction.init(JtaTransaction.java:68)
    at com.ibatis.sqlmap.engine.transaction.jta.JtaTransaction.getConnection(JtaTransaction.java:131)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:82)

标签: oraclejdbcweblogic12c

解决方案


JDBC 驱动程序版本 12.2.0.0.0 及更高版本的 My Oracle Support 中存在一个关于查询超时的已知错误。看看笔记

Oracle.jdbc.ReadTimeout 阻止正确的查询超时处理,导致连接泄漏(文档 ID 2561983.1)


推荐阅读