2016-12-14 11 views
0
私はSQL Server 2008のと、警告/例外

一覧切断されていないか、正しく切断データベース・コネクション

WARNING [Tomcat JDBC Pool Cleaner[510210701:1481713957404]] org.apache.tomcat.jdbc.pool.ConnectionPool.suspect Connection has been marked suspect, possibly abandoned PooledConnection[[email protected]][67975 ms.]:java.lang.Exception 
を取得した後、動的なJavaのWebアプリケーション(Tomcatの8.0.15、Java EEの7のWeb)を使用してい

私はソースコードのどこかでJDBCやHibernate Connectionをデータベースと切断するのを忘れていました。私は何とかそれらをリストしたいと思います。

定期

static 
    { 
     try { 
      Context context = new InitialContext(); 
      dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sqlserv"); 
     } catch (NamingException ex) { 
      Logger.getLogger(Basisverbindung.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

は、その仕事をしていませんし、私のhibernate.cfg.xmlでそれは同じだ:私はstackoverflowの通過を見て、私はすでに相談わずか数のエントリを見つけ

<property name="hibernate.connection.datasource">java:comp/env/jdbc/sqlserv</property> 

(そして、さえupvoted):

しかし、私は、私は接続を閉じるのを忘れてどこ追跡するためにどのような方法を見つけるしたいと思いますので、問題が解消されないか、しばらくして再び起動します。私のTomcatにはPSIプローブがあり、リクエストにいくつかのエラーが出てきていることを伝えています。 私はそこでリクエストの素敵なリストを見ていますが、どのリクエストが放棄されたのか分かりません。

SQL-Server Management StudioのActivityMonitorはあまり役に立ちません。閉鎖されている(またはそうでなければならない)いくつかのプロセスがリストされています。

この種の問題を分析するにはどうすればよいですか?

答えて

0

あなたが本当にやりたいことは、「放棄された接続」の追跡と報告を有効にすることです。

  1. commons-dbcp2ベース:

    あなたは(2がある)を使用しましたが、彼らは同様に構成されているTomcatのJDBCデータソースプールのどの言いませんでしたlogAbandoned=trueremoveAbandonedOnBorrow=true

  2. tomcat-jdbcは、ベース: logAbandoned=trueremoveAbandoned=true

私はいつも誰もが開発環境で1の最大プールサイズで実行をお勧めします。これは、プールのリークを確認するのに役立ちます非常にあなたのコードに植え付けられている可能性のあるデッドロックをキャッチします。

+0

私はtomcat-jdbcを使用しており、両方のオプションを設定しています – Qohelet

+0

... 'Connection'または' Statement'オブジェクトが正しく閉じられていない場所でスタックトレースが表示されませんか? –

+0

私は接続の分布を扱う静的クラスを使用しています(私はコードの残りの部分を投稿することができますが、それほど素晴らしいものではありません)。だから、スタックはそのクラスを参照するだけです... – Qohelet

関連する問題