Ich bin immer pool-Fehler Zeitüberschreitung beim warten im Leerlauf Objekt
<Resource name="jdbc/name" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:url?autoReconnect=true"/>
Ich erstellt connection-pool mit der obigen Aussage in der Tomcat-server.
Einigen android-app verbindet sich mit meiner Bewerbung über die web-service.Durch web-service ich bin das senden und empfangen von Daten.
Ich bin immer der Fehler
SQLState: null
[2013-12-05 14:13:06,156]ERROR069688[http-8080-10] - org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:78) -
Cannot get a connection, pool error Timeout waiting for idle object
Aber keine Ahnung für mich.
Was sind die Gründe für diese.
Vielen Dank im Voraus...
- Könntest du bitte posten Sie Ihre server Verbindung maxThread Graf, wie ist das Verhältnis zwischen max-threads auf der server-Ebene und der jdbc-Ebene?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Ausnahme besagt, dass der pool-manager produzieren können, eine tragfähige Verbindung zu einem wartenden-requester und der maxWait bestanden hat, also das auslösen einer timeout. Es gibt mehrere mögliche Ursachen, aber in der Regel fallen in zwei Breite Kategorien:
Die DB down ist oder unreachable. Dies könnte sein, weil Sie vergessen haben, es zu starten, oder es ist abgestürzt, oder die Netzwerkverbindung zwischen Ihnen und der DB hat aufgehört zu arbeiten. Aber im Grunde genommen, der pool wurde nicht als gültige neue Verbindung und damit die requester hat sa warten auf eine neue Verbindung länger als der timeout und hat aufgegeben. Dies ist in der Regel die weniger wahrscheinlichen Fall, Ursache, die Sie sehen in der Regel andere Fehler, wenn dies geschieht.
Den connection-pool (das ist zu 100 max active) ist, aus verbindungen. Dies könnte aufgrund der hohen Nachfrage Volumen, oder es könnte ein Hinweis auf eine Verbindung undicht, wo die verbindungen sind nie an den pool zurückgegeben und schließlich beim überschreiten des maximalen verbindungen begrenzen. Dies ist die wahrscheinlichere Ursache... in der Regel eine Verbindung undicht wegen nicht schließen von db-Ressourcen, wenn Sie fertig sind mit Ihnen.
Manchmal 1 und 2, um dieses Szenario zu sagen, wenn die DB auf einen Fehler, wo die Abfragen nicht mehr ausgeführt werden. Wenn das passiert, es ist wie eine Verbindung undicht, weil neue verbindungen gehen aus und blockieren auf eine Abfrage gegen die DB und werden nie veröffentlicht. Schließlich sind alle verbindungen aktiv sind und der nächste thread zum anfordern einer Verbindung in die Warteschlange, da gibt es keine mehr verbindungen heraus zu geben. Da die DB ' s gehimmelt, Sie werden nicht sehen, alle anderen Ausnahmen, bis die ersten requester wer mal in die Warteschlange. Wir verwendet, um zu sehen, diese gelegentlich mit Oracle UCP, wenn der Oracle-DB backend abgestürzt.
Ich würde empfehlen die Verwendung von JConsole zur überwachung des DB-pool-Größen, wenn dies geschieht, und bestimmen, welche der beiden oben genannten Kategorien von Ursachen dieser Fehler ausgelöst wird, durch. Und dann können Sie versuchen, die fix-Verbindung oder zu manipulieren, die Größe des Pools/timeout-Parameter, um Platz für die tatsächliche Nachfrage (Sie können auch manipulieren Konnektor-Parameter, der in Tomcat zur Reduzierung der gesamten Nachfrage auf die Anwendung). Wenn Sie in Tomcat können Sie in der Regel nur ausführen JConsole (das ist in den JDK-bin-Verzeichnis) und fügen Sie an der tomcat-Prozess und dann einfach schauen Sie durch die JMX-Konsole zu finden, wo die pool-Größe zu finden ist... das hängt meist davon ab, den Typ der Datenquelle (dbcp vs oracle ucp vs etc). Anschließend können Sie doppelklicken Sie auf das Feld Werte zu Plotten, so dass Sie verfolgen können, Sie im Laufe der Zeit.
Auch, die Sie benötigen, um in Tomcat JMX JConsole für die JMX-überwachung zu arbeiten.