0

Tomcat 6 と tomcat-jdbc.jar および tomcat プーリングを使用しています (現在、最新バージョンの 7.0.28 を使用していますが、以前のバージョンでも試しました)。

これは、バックエンドで PostgreSQL を使用しています。

約 2 ~ 5 日に 1 回 (発生するのは「ランダム」です)、サーバーは利用可能なすべてのデータベース接続を約 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