Oracle 断开连接,尽管它有足够的进程/会话


我在一台 Win 2008

机器上有一个相当高流量的 Tomcat 应用程序服务器,连接到 Oracle 数据库 11.2.0.1.0(Windows Server 64x 2k8 R2;~500-1000 个唯一用户在一分钟内访问我的 Web 应用程序)。它适用于单个 Tomcat,最多有 40 个连接用于连接池设置(我使用的是 DBCP)。

Oracle与Tomcat安装在同一台机器上。当我启动另一个 Tomcat 并在两个 Tomcat 之间平衡用户时(它们绑定到不同的 IP 并在 DNS 级别完成平衡),一个总是与以下堆栈跟踪断开连接:

Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:71)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
    ... 88 more
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:958)
    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)

这很奇怪,因为我将"连接"和"会话"参数都设置为一个值,当我计算活动会话时甚至没有满足该值。

Oracle processes参数为 700 sessions为 1216。当一个 Tomcat 断开连接时,以下查询返回少于 160 个会话: SELECT COUNT(*) FROM v$session;

显然,

等待从池中获取免费连接时超时。在第二个雄猫的配置中仔细检查您的MaxActive设置的正确性。

如果您针对 Oracle 中的限制(MaxProcesses 和 MaxSessions)运行,则会出现 ORA-xxxxx 错误。

最新更新