database - 在配置的阻塞超时内没有可用的托管连接(JBoss 7 和 Postgres)

标签 database jboss7.x datasource postgresql-9.1

我会定期收到错误:

ERROR JDBCExceptionReporter --> javax.resource.ResourceException: IJ000453: Unable to get managed connection for 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.service() for servlet jsp threw exception: javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (30000 [ms]) at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:377) and etc.

.

所以,我有下一个数据源配置。在 JBoss 上:

<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。 为什么我得到这个异常(exception)?

最佳答案

您的主要问题可能是连接泄漏,但也可能不是。换句话说,数据库事务正在离开池而不是返回。在这种情况下,有一些具体的事情要着手,因为问题可能是代码问题,而不是数据库问题。

首先要检查的是 pg_stat_activity 中所有内容的当前状态。这包括最近的查询和交易状态。在连接泄漏中,您可能会发现大量具有类似查询的 IDLE 连接。这些查询可以帮助您追踪连接泄漏。同样在连接泄漏中,当问题开始时,它会一直持续到您重新启动为止。

如果问题实际上是可用连接太少,那么您会看到很多ACTIVE 连接。在这种情况下,增加池中的连接数。同样在这种情况下,问题会间歇性地发生,然后似乎会自行发生。

关于database - 在配置的阻塞超时内没有可用的托管连接(JBoss 7 和 Postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17469743/

相关文章:

mysql - 尝试在 mysql 中创建过程时出现 RECURSIVE 附近的语法错误

python - 如何从 Python 连接到 Netezza 数据库?

java - 如何解决 Jboss EAP 7.1.4 java.util.concurrent.TimeoutException : No invocation response received in 30000 milliseconds

sql - TextWrangler:此文件似乎不包含有效的 ‘shebang’ 行

android - 从现有数据库创建一个新数据库(或者只是创建新表?)

session - 在 Jboss AS 7 重启/部署之间保持 session

java - JBoss 7 : how to dynamically load jars

javascript - 可以在 Grafana 数据源库中导入外部 JavaScript 库

java - 从 TOMCAT 迁移到 IBM Websphere 时出现 ORA-01017 用户名/密码无效

java - 将数据源配置迁移到属性文件