oracle - 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)
解决方案
JDBC 驱动程序版本 12.2.0.0.0 及更高版本的 My Oracle Support 中存在一个关于查询超时的已知错误。看看笔记
Oracle.jdbc.ReadTimeout 阻止正确的查询超时处理,导致连接泄漏(文档 ID 2561983.1)
推荐阅读
- c# - 如何在融合的 kafka C# 中读取 GenericRecord 特定数据
- mysql - 如何正确使用 sum (case ... when ... then ...)?
- swift - 在超类中实现 CodingKey 映射
- javascript - 正确使用“更改”事件
- php - 用户登录并注册后如何显示“姓名”和“电子邮件”等数据
- java - 使用 ICU 将数字(字符串)拼写为整数
- angular - 通过rest config动态构建角度页面
- node-red - 创建文件失败:无效的 WIN32 路径字符
- c# - 优雅地关闭 .NET Core 2 linux 守护进程中的通用主机
- jenkins - 如何在 Jenkins job Builder 中使用“inject-passwords”?