2017-09-21 13 views
0

私は、Spring 3.0.3、Hibernate 3.6.0およびOracle DBを利用する既存のアプリケーションを持っています。c3p0非アクティブな接続が最大待機時間後に接続プールから削除されない

私はそれをセットアップしてc3p0を稼働させましたが、私は本当に把握できない奇妙なことに気付きました。

この私の春は

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
<property name="driverClass" value="${xxgglom.driver}" /> 
<property name="jdbcUrl" value="${url}" /> 
<property name="user" value="${username}" /> 
<property name="password" value="${password}" /> 
<property name="minPoolSize" value='5' /> 
<property name="maxPoolSize" value="40" /> 
<property name="maxIdleTime" value="240" /> 
<property name="maxIdleTimeExcessConnections" value="180" /> 
<property name="maxStatements" value="50" /> 
<property name="testConnectionOnCheckin" value="true" /> 
<property name="testConnectionOnCheckout" value="false" /> 
<property name="idleConnectionTestPeriod" value="300" />  

に設定されている私は、データベースのV $セッションをチェックして、私はそれがプール内の5つの接続を作成します参照してください。私はアプリを使用し始めると、必要に応じてプールサイズが増えます。だから私はC3P0がログをチェックしていると言うことができます。私が持っている1つの問題です。これらの非アクティブな接続は、maxIdleTimeに合格します。

私は生きている時間をチェックし、240秒を過ぎています。私はデータベースをもう一度チェックし、それらはすべて非アクティブに見えますが、ログを見ると私にこのことを教えてくれます。

trace [email protected] [managed: 5, unused: 4, excluded: 0] (e.g. [email protected]) 

私は正確に何が起こっているのかわからないが、しばらく後に、これらのアイドル接続が積み上げ開始し、彼らは、接続プールから抜粋取得していないようです。何をすべきかに関する提案はありますか?

答えて

2

maxIdleTimeは、特定の時点で接続が切断されることを保証しません。あなたの設定の下で少なくとも4分ごとに各Connectionが使用されている限り、それらは削除されません。コネクションのライブタイムに無条件の制限を設定したい場合は(私はあなたがそうする理由はわかりません)、maxConnectionAgeを使用できます。

+0

私が見ている接続は、maxIdleTime内で決して使用されません。それだけでそこに座っている。現在second_in_waitは3614秒です。誰も私以外のアプリを使用していません。現在、同じ問題を抱えている別の接続があり、アイドル状態にあるのは1325秒です。問題は、彼らはまったく再利用されていないということです。 – Shinne

+0

「再利用しない」とはどういう意味ですか?管理された数が上がったり上がったりしていますか、サーバー側で管理されている数よりも多くの開いている接続が表示されていますか? –

+0

上昇し続ける。例として、これら2つのアイドル状態の接続が選択されていません。しばらくしてから使用します。 3つ目、4つ目、5つ目になり、実際にプールされていないときに5つの接続が使用されていると考えられるため、プールのサイズが大きくなり始めます。 – Shinne