• ベストアンサー

Tomcatを再起動するとエラーが解消する

PostgreSQLを利用したJavaのシステムで、DB更新中に、エラーが発生することがあります。 その後、再処理を行うと、次のメッセージが出ます。 org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted Tomcatを再起動すると、正常にDB更新が出来るようになります。 ほぼ毎日使っているシステムですが、1月18日と、4月26日の2回発生しています。 どのようなところを調査すればよいか、教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 そのままエラーメッセージを検索エンジンにひっかけるといろいろな情報が出てきますよ。 例えば http://d.hatena.ne.jp/kawam/20060208 エラーメッセージの意味もそのままで、プールを使い果たしてコネクションが取得できないという意味です。 取得したコネクションのclose漏れが原因だと思います。 Connection conn = null; try { conn = コネクション取得 // なんかいろいろ処理 conn.close(); } catch ( Exception e ) { // エラーが起きたとき } この場合、なんかいろいろな処理で例外が発生した場合はコネクションが閉じられない状態になります。 Connection conn = null; try { conn = コネクション取得 // なんかいろいろな処理 } catch ( Exception e ) { } finally { if ( conn != null ) conn.close(); } こうすると例外が発生しても必ずfinallyを通りますのでコネクションがクローズされます。 コネクション周りを見直してみてください。

Horirin39
質問者

お礼

早速のご回答ありがとうございます。 プログラムを調べて見ましたところ、 finallyには、コネクションのcloseをする文がありませんでした。 if ( conn != null ) conn.close(); を追加してみます。

その他の回答 (1)

回答No.2

エラーメッセージの指摘に従って調査すればよいのではないでしょうか? コネクションプールが空になったのなら、DBコネクションのクローズ抜けの 調査をすべきでしょう。単純な話です。

Horirin39
質問者

お礼

ご回答ありがとうございます。 Connectionのクローズ漏れの調査をします。