2016-12-14 3 views
0

Ich bin eine dynamische Java Web Application (Tomcat 8.0.15, Java EE 7 Web) mit einem SQL Server 2008 und nach der Warnung/Ausnahme bekommtListe nicht getrennt oder nicht richtig getrennt Datenbank-Verbindungen

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 

ziemlich oft frage ich mich irgendwo in den Tiefen meines Quellcodes habe ich vergessen, eine JDBC oder Hibernate Connection mit der Datenbank zu trennen. Ich würde sie gerne auflisten.

Ein regelmäßiges

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); 
     } 
    } 

macht diesen Job und in meinem hibernate.cfg.xml ist es das gleiche:

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

ich durch Stackoverflow gesucht und gefunden nur wenige Einträge, die ich bereits angehören (und sogar upvoted):

Aber das Problem weiterhin besteht oder kommt nach einer Weile wieder so würde Ich mag einen Weg finden, wie man auf der Spur, wo ich die Verbindung schließen vergessen. Auf meinem Tomcat läuft auch eine PSI Probe, die mir mitteilt, dass einige Fehler in den Anfragen auftauchen und manchmal die Reaktionszeit ausschöpfen. Ich sehe dort eine nette Liste von Anfragen, weiß aber nicht, welche aufgegeben werden.

Der ActivityMonitor im SQL-Server Management Studio ist nicht zu viel Hilfe entweder es listet einige Prozesse auf, von denen ich weiß, dass sie geschlossen sind (oder gut, sollte sein).

Was ist der beste Weg, um diese Art von Problem zu analysieren?

Antwort

0

Was Sie wirklich tun möchten, ist "verlassene Verbindung" Tracking und Reporting aktivieren.

Sie nicht sagen, welches von Tomcat-JDBC-Datasource-Pools Sie wurden mit (es gibt zwei), aber sie sind ähnlich konfiguriert:

  1. commons-dbcp2 -basierte: logAbandoned=true, removeAbandonedOnBorrow=true
  2. tomcat-jdbc -basierte: logAbandoned=true, removeAbandoned=true

ich empfehle jeder immer mit einer maximalen Poolgröße von 1 in Entwicklungsumgebungen laufen. Dies wird Ihnen helfen, Pool-Leck sehr schnell zu identifizieren, und fangen Sie alle möglichen Deadlocks, die Sie möglicherweise in Ihrem Code gepflanzt haben.

+0

Ich benutze tomcat-jdbc und habe beide Optionen – Qohelet

+0

... gesetzt und Sie sehen keine Stack-Traces für wo Ihre 'Connection' oder' Statement' Objekte nicht richtig geschlossen sind? –

+0

Ich verwende eine statische Klasse, die die Verteilung von Verbindungen behandelt (ich kann den Rest des Codes, aber es ist nicht zu grandios). Also bezieht sich der Stack meistens nur auf diese Klasse ... – Qohelet

Verwandte Themen