Tomcat DBCPを次のように構成しました。
<Resource
name="jdbc/myoracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
username="abc"
password="abc"
maxActive="20"
maxIdle="4"
minIdle="0"
maxWait="4"
removeAbandoned="true"
logAbandoned="true"
removeAbandonedTimeout="3"
/>
上記の設定が正しいかどうかはわかりません。私はstruts 2を使用しています.Webページにはメニューリンクがあり、すべてのdb操作を実行し、プーリングとの間の接続を開いたり閉じたりするアクションクラスを呼び出しています。問題は、メニュー リンクを 40 ~ 50 回連続してクリックし続けると、接続が増加し、マウスを 1 回クリックしてから応答を待つと正常に動作する (つまり、接続が増加しない) ことです。
単一の応答を待たずに狂ったように連続してクリックすると、接続が急激に上昇し、最初の状態に戻りません。私の接続がアクション クラスのどこかでリークしている場合、マウスを 1 回クリックし、応答を待ってから別のマウス クリックに対して常に正常に動作しているのはなぜですか?
(同じメニューリンクの結果を連続してクリックする:) maxActive を 20 と定義したので、接続は 24 まで続き (私が覚えているように)、その後プールが使い果たされます。つまり、新しい接続/要求は、使い果たされたプールから接続を取得するために無期限に待機します。
ここで私の疑問は、removeAbandonedTimeout = 3を指定したのに、なぜremoveAbandonedが接続を閉じていないのかということです。接続メモリ リークがあると仮定した場合、または意図的に接続を閉じていない場合、removeAbandoned は開いているすべての接続を強制終了しますか?
または、DBCP 設定または上記のパラメーターに問題がありますか? これを整理するのを手伝ってください。