我在Win 2008计算机上有一个相当高流量的Tomcat应用程序服务器,连接到Oracle Database 11.2.0.1.0(Windows Server 64x 2k8 R2; ~500-1000个唯一用户在一分钟内访问我的Web应用程序)。它适用于单个Tomcat,连接池settiong最多有40个连接(我正在使用DBCP)。
Oracle与Tomcat安装在同一台机器上。当我启动另一个Tomcat,并在两个Tomcats之间平衡用户时(它们绑定到不同的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)
这很奇怪,因为我将'connections'和'sessions'参数设置为一个值,当我计算活动会话时,这个值甚至都不能满足。
Oracle processes
参数为700 sessions
为1216.当一个Tomcat脱离连接时,以下查询返回少于160个会话:
SELECT COUNT(*) FROM v$session;
答案 0 :(得分:0)
显然,等待从池中获得免费连接的时间已经过了。在第二个Tomcat的配置中仔细检查MaxActive设置的正确性。
如果您违反了Oracle(MaxProcesses和MaxSessions)中的限制,则会出现ORA-xxxxx错误。