Пул оракул UCP остается без подключений, но база данных свободна от сеансов

У нас есть приложение Java8, подключающееся к базе данных Oracle 11.2.0.4 через JNDI с использованием пула соединений UCP, настроенного как ресурс в файле server.xml Tomcat. Это конфиг, который мы используем:

<Resource name="jdbc/SharedApp"
   auth="Container"
   factory="oracle.ucp.jdbc.PoolDataSourceImpl"
   type="oracle.ucp.jdbc.PoolDataSource"
   user="my_user"
   password="**********"
   connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
   url="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sid"
   implicitCachingEnabled="true"
   maxPoolSize="300"
   minPoolSize="30"
   initialPoolSize="30"
   inactiveConnectionTimeout="60"
   abandonedConnectionTimeout="120"
   maxStatements="100"
   maxConnectionReuseTime="300"
   maxConnectionReuseCount="100"
   timeToLiveConnectionTimeout="18000"
   validateConnectionOnBorrow="true"
   fastConnectionFailoverEnabled="true"
   jdbcInterceptors="ResetAbandonedTimer;ConnectionState;StatementFinalizer;SlowQueryReportJmx(threshold=10000)"
   sqlForValidateConnection="select 1 from DUAL"
   connectionPoolName="SharedAppPoolName"/>

Когда сервер запускается, если мы запрашиваем активные сеансы my_user, их 30, как и ожидалось. Но через некоторое время это число, которое мы никогда не видели для достижения maxPoolSize, может уменьшиться при значении minPoolSize. Это звучит странно, так как мы понимаем, что пул никогда не должен быть ниже этого числа, не так ли? Что еще хуже, кажется, что пул не восстанавливается сам, и мы оставили соединения, поэтому мы получили разные исключения SQL, такие как:

Caused by: oracle.ucp.UniversalConnectionPoolException: All connections in the Universal Connection Pool are in use
at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:368)
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:49)
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:80)
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:131)
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:386)
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:168)
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:143)
at oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:157)
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:931)

База данных, кажется, в порядке, и мы можем войти (например, с помощью Sql Developer) и сделать несколько запросов к ней, как обычно.

Мы попытались удалить свойства maxConnectionReuseTime и maxConnectionReuseCount безуспешно. Кто-нибудь может помочь нам?

0 ответов

Другие вопросы по тегам