0

我们正在使用带有 tomcat-jdbc.jar 和 tomcat 池的 Tomcat 6(我们目前使用的是最新版本 7.0.28,但也尝试过使用以前的版本)。

这是在后端使用 PostgreSQL。

大约每 2 到 5 天一次(这是相当“随机”发生的),我们的服务器在大约 10 分钟的时间内耗尽了所有可用的数据库连接,我们在日志中看到了这些(我们已经打开了 FINE 日志记录) ):

2012-10-01 18:40:29,998 ERROR [TP-Processor29] JDBCExceptionReporter.logExceptions(72) | [TP-Processor29] Timeout: Pool empty. Unable to fetch a connection in 0 seconds, none available[size:150; busy:41; idle:0; lastwait:0].

2012-10-01 18:40:30,000 ERROR [TP-Processor29] JDBCExceptionReporter.logExceptions(72) | [TP-Processor29] Timeout: Pool empty. Unable to fetch a connection in 0 seconds, none available[size:150; busy:41; idle:0; lastwait:0].

我正在尝试追查此问题的根本原因。

当查看数据库并发生这种情况时,所有连接都显示为“IDLE”。

我们当前的配置如下所示:

 <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://db/dbname?useUnicode=true&amp;characterEncoding=utf-8"/>
    <property name="username" value="postgres"/>
    <property name="password" value="postgres"/>
    <property name="initialSize" value="8"/>
    <property name="maxActive" value="150"/>
    <property name="maxIdle" value="10"/>
    <property name="maxWait" value="30"/>
    <property name="defaultAutoCommit" value="true"/>
    <property name="validationQuery" value="SELECT 1"/>
    <property name="validationInterval" value="60000"/>
</bean>

而且,我们在 logging.properties 中的登录是:

org.apache.tomcat.jdbc.pool.level=FINE

大多数时候,我们使用大约 15 到 20 个数据库连接,但是,正如我所提到的,问题是每隔几天,它就会迅速用完所有连接,并且需要重新启动。

我们试图将其归结为 Tomcat 池问题、Hibernate 问题、Spring 问题或应用程序问题。

首先,任何想法为什么:

A) 为什么显示:[size:150; 忙:41;空闲:0;lastwait:0] ...其他 150-41 个连接在哪里?

B)记录时,它显示连接何时打开,但不显示连接何时关闭。我们怎样才能打开它?

4

0 回答 0