戯言

つらつらと気づいたことを書いていきます。人狼とか。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デバッグ用設定の戻し忘れで、Connection has already been closed.


こんなログが出てました。

catalina.out にはこんなログ
2015/02/08 19:46:39 org.apache.tomcat.jdbc.pool.ConnectionPool abandon
警告: Connection has been abandoned PooledConnection[org.apache.derby.impl.jdbc.EmbedConnection40@1059970 (XID = 1881168832), (SESSIONID = 131), (DATABASE = /javadb/werewolf), (DRDAID = null) ]:java.lang.Exception
	at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1063)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:780)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:619)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
	:
	:

例外発生時のスタックトレースはこんなログ

java.sql.SQLException: Connection has already been closed.
	at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:117)
	at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109)
	at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80)
	at com.sun.proxy.$Proxy6.commit(Unknown Source)
	at jp.werewolf.db.DBAccess.reDropInsertAndCreateIndexRecord(DBAccess.java:4334)
	:
	:

close漏れ発見のために、DBCP のコネクションの追跡機能で removeAbandoned=true、
logAbandoned=trueで運用していて、
close漏れの対応完了後もそのままにしていたところ、
裏で回しておくだけの長時間かかるトランザクションが、
タイムアウト時間以上かかってしまって、これらのエラーとなりました。

クエリがまだ実行中にもかかわらず、タイムアウト時間がきて
コネクションが回収されてしまうと、 abandon の警告ログが出ます。
で、さらに回収後にクエリを実行して Connection has already been closed. と
なったようです。

タイムアウト時間を延ばそうかとも思ったのですが、
abandon の機能自体を無効にしました。

調査後もデバッグ用の設定のままにしていた凡ミスです。




関連記事

管理者にだけ表示を許可する
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。