2014-09-22 136 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一起工作,因为该版本不包括超时功能。这就是为什么查询没有超时正常运行的原因。