2014-09-22 142 views
2

我們已經在新服務器上移動了代碼,因爲之前我們使用的是tomcat6,但在新系統上安裝了tomcat7。所以我們得到了以下錯誤,我做了Google搜索並進行了更改,但仍然收到相同的錯誤。錯誤如下。Tomcat 7連接池錯誤

Sep 21, 2014 6:15:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon 
WARNING: Connection has been abandoned PooledConnection[[email protected]]: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) 
     at com.fstl.resellermg.util.DbUtils.getConnection(DbUtils.java:34) 
     at com.fstl.resellermg.bo.LeadExtBO.getListUploadStatus(LeadExtBO.java:1350) 
     at com.fstl.resellermg.servlet.GetLeadCountByUserName.doPost(GetLeadCountByUserName.java:56) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 

我context.xml的配置是

<Context> 
<Resource name="jdbc/testDB" 
auth="Container" 
type="javax.sql.DataSource" 
username="root" 
password="" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/xxx" 
validationQuery="SELECT 1" 
validationInterval="30000" 
maxWait="1000" 
removeAbandoned="true" 
initialSize="10" 
maxActive="100" 
maxIdle="50" 
minIdle="10" 
suspectTimeout="60" 
timeBetweenEvictionRunsMillis="30000" 
minEvictableIdleTimeMillis="60000" 
testOnBorrow="true" 
removeAbandonedTimeout="60" 
logAbandoned="true"/> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 

</Context> 
+0

我發現使用具有更好錯誤消息的連接池軟件可以幫助我診斷這些類型的事情。我使用Hikari CP並發現它更有用。也就是說,我完全同意@kaqqao的做法(對該答案爲+1)。 – bphilipnyc 2015-03-25 17:49:32

+0

這是您正在尋找的解決方案 - https://stackoverflow.com/questions/13129070/webapp-tomcat-jdbc-pooled-db-connection-throwing-abandon-exception – 2017-08-04 06:07:20

回答

6

這個錯誤清楚地說,連接被放棄了。這意味着兩件事之一。無論是在你的代碼中的某處,你沒有正確地關閉連接,或者你有一個長時間運行的查詢超過了超時時間(你的情況是一分鐘),所以Tomcat錯誤地認爲它已被放棄。讓您的數據庫日誌緩慢查詢,或者分析您的應用程序以確定後者是否是這種情況。

+0

嗨,先生,感謝您的快速回復 如何它在tomcat6中工作沒有任何失敗。 – rajub 2014-09-22 18:42:21

+0

也許你的服務器規範,網絡佈局或防火牆規則改變了延遲和超時。也許你以前的游泳池不是在殺死被遺棄的連接可能是一百萬件事情,如果不知道應用程序的內涵,幾乎不可能說出來,但錯誤消息對於發生的事情非常明確。但遵循我對緩慢查詢和/或分析的建議應該能讓你走上正軌。您可能只想使用PSI Probe等方式嘗試監控您的游泳池使用情況:https://code.google.com/p/psi-probe/ – kaqqao 2014-09-23 07:56:28

-1

這與Tomcat 6一起工作,因爲該版本不包括超時功能。這就是爲什麼查詢沒有超時正常運行的原因。