Fehlende Verbindungen im tomcat jdbc-Verbindungspool
Wir nur migriert von dbcp, tomcat, jdbc-connection-pooling.
Wir haben versucht, das system zu laden und Sie erhalten die folgende Ausnahme:
java.sql.SQLException: [IA1856] Timeout: Pool empty. Unable to fetch a connection in 1 seconds, none available[size:125; busy:90; idle:0; lastwait:1000].
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:632)
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:174)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:124)
at com.inneractive.model.mappings.BasicPersistenceEntityMapping.getConnection(BasicPersistenceEntityMapping.java:233)
at com.inneractive.model.mappings.BasicPersistenceEntityMapping.callWithConnection(BasicPersistenceEntityMapping.java:243)
at com.inneractive.model.mappings.PersistenceEntityMapping.get(PersistenceEntityMapping.java:194)
at com.inneractive.model.data.client.ClientUtils.GetClientByExamples(ClientUtils.java:353)
at com.inneractive.client.ExternalAdRingsClientStart.getClientInfoByRequestParametersOrInsert(ExternalAdRingsClientStart.java:1329)
at com.inneractive.client.ExternalAdRingsClientStart.newClientSession(ExternalAdRingsClientStart.java:245)
at com.inneractive.simpleM2M.web.SimpleM2MProtocolBean.generateCampaign(SimpleM2MProtocolBean.java:235)
at com.inneractive.simpleM2M.web.SimpleM2MProtocolBean.generateCampaign(SimpleM2MProtocolBean.java:219)
at com.inneractive.simpleM2M.web.AdsServlet.doGet(AdsServlet.java:175)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:396)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Hinweis:
[size:125; busy:90; idle:0; lastwait:1000]
Wo sind die verbindungen, die nicht besetzt sind?
Der beschäftigt Anzahl weiter unten nach diesem,
aber wir immer noch nicht geschafft irgendwelche verbindungen.
Irgendwelche Ideen?
Konfiguration:
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" loginTimeout="10000"
maxActive="35" maxIdle="35" maxWait="1000" name="jdbc/mysql"
password="-----" testOnBorrow="true" testOnReturn="false" type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/my_db?elideSetAutoCommits=true&useDynamicCharsetInfo=false&rewriteBatchedStatements=true&useLocalSessionState=true&useLocalTransactionState=true&alwaysSendSetIsolation=false&cacheServerConfiguration=true&noAccessToProcedureBodies=true&useUnicode=true&characterEncoding=UTF-8"
username="root" validationQuery="SELECT 1"/>
env: ubuntu und tomcat 6. db - mysql
InformationsquelleAutor der Frage yael alfasi | 2012-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich ein Blick auf die Quelle der ConnectionPool.java Sie scheinen zu schlagen das code-snippet in die
borrowConnection()
Methode:Also nach dieser, Ihre Verbindung ist Null.
Den Wert
con
abgerufen werden auf der Linie:wenn Sie den code, sehen Sie
idle
ist (abhängig von Ihrer Konfiguration, aber standardmäßig) FairBlockingQueue. Sie können die Kasse die Umsetzung für die Hinweise.Du In der Regel immer in der Nähe von ResultSets, Statements und Verbindungen und verbindungen verwendet werden sollte ordnungsgemäß freigegeben zurück in den pool.
Tut man das nicht richtig kann Ergebnis in verbindungen nie geschlossen worden => nie wieder bereit für die Wiederverwendung ("connection pool "Lecks").
Ich schlage vor, Sie bauen einige detaillierte Protokollierung über den Zustand des Pools und zu überwachen, um das problem einzugrenzen.
Einige Richtlinien, die von Apache zur Verhinderung von Datenbank Verbindungs-pool-leaks:
aufgegeben Datenbank-verbindungen werden entfernt und recycelt
legen Sie die Anzahl der Sekunden, die eine Datenbank-Verbindung im Leerlauf befindet, bevor es als aufgegeben
melden Sie einen stack-trace, der den code, verlassen Sie die Datenbank-Verbindung Ressourcen. Beachten Sie, dass "die Protokollierung von Verbindungen aufgegeben fügt overhead für jeden Anschluss zu leihen, weil ein stack-trace erzeugt werden."
Ich denke immer noch leicht Steigend, die
maxWait
Wert (1200, 1500, 1700 - Experimentieren Sie einfach, es wird kein Unterschied in den Reaktionszeiten aus Sicht der Benutzer) löschen Sie den seltenen Fällen, in denen Sie noch Probleme haben.InformationsquelleAutor der Antwort hovanessyan
Es klingt wie Sie ' ve wurde fallen gelassen und für einige Grund Ihrer Verbindungs-pool nicht versuchen, schließen Sie Sie wieder an.
Fügen Sie die URL ein, das Sie anschließen:
Und fügen Sie diese als eine Eigenschaft der Ressource sollte dazu führen, dass inaktive verbindungen werden automatisch mit dem Internet verbunden.
Auch dies sollte Ihnen ermöglichen, zu sehen, verbindungen gelöscht:
Gibt es mehrere ähnliche Fragen auf stack overflow.
Tomcat das connection pooling,Leerlauf-verbindungen und Verbindungs-Erstellung
JDBC Connection pool nicht Wiedereröffnung Verbindungen in tomcat
Aber es kann auch sein, dass Sie nicht die Freigabe der verbindungen völlig was ist die Ursache von Ihnen sterben.
JDBC MySql connection pooling " - Praktiken zu vermeiden, erschöpft connection pool
InformationsquelleAutor der Antwort Danack
scheint ein Fehler zu sein in den pool,
size
variable wird um eins erhöht, dann versuchen zu erstellen-Anschluss,aber wenn die Schöpfung ausfällt... wir haben
size
großen Wert und nicht die tatsächlichen verbindungen im pool - schrecklich :InformationsquelleAutor der Antwort Andriy Denysenko