我定期收到错误:
错误JDBCExceptionReporter - > javax.resource.ResourceException:IJ000453: 无法获得java的托管连接:jboss / datasources / myDB 08:12:05,928 ERROR [org.apache.catalina.core.ContainerBase。[jboss.web]。[default-host]。[/ mySoftware]。[jsp]](ajp - xx.255.0.yyy-8109- 21)servlet jsp的Servlet.service()抛出异常:javax.resource.ResourceException:IJ000655:配置的阻塞超时内没有可用的托管连接(30000 [ms]) 在org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:377)等。
所以,我有下一个数据源配置。在JBoss AS上:
<datasource jta="true" jndi-name="java:jboss/datasources/myDB" pool-name="ssbs-pssbs" enabled="true" use-ccm="true">
<connection-url>jdbc:postgresql://xx.255.0.yyy/myDatabase</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-jdbc4</driver>
<pool>
<min-pool-size>30</min-pool-size>
<max-pool-size>150</max-pool-size>
<prefill>true</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>tick</user-name>
<password>tack</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
在我的Postgres服务器上我允许500上的max_connection。 为什么我得到这个例外?
答案 0 :(得分:3)
您的主要问题可能是连接泄漏,但可能不是。换句话说,数据库事务正在离开池而不被返回。在这种情况下,有一些特定的事情要开始,因为问题可能是代码问题而不是数据库问题。
要检查的第一件事是pg_stat_activity
中所有内容的当前状态。这包括最新的查询和事务状态。在连接泄漏中,您可能会发现大量具有类似查询的IDLE
连接。查询可以帮助您跟踪连接泄漏。此外,在连接泄漏中,当问题开始时,它将继续,直到您重新启动。
如果问题实际上连接的可用性太少,那么您将看到许多ACTIVE
个连接。在这种情况下,增加池中的连接数。同样在这种情况下,问题将间歇性地发生,然后看起来单独出现。