Tomcat连接池,空闲连接和连接创建

时间:2011-09-09 09:39:58

标签: java mysql tomcat jdbc connection-pooling

我在Web应用程序中遇到以下问题。当我将服务器开启一段时间(例如24小时)时,我的应用程序停止工作。 我正在使用tomcat 7和连接池。我的数据库是MySQL。

我收到以下异常:

  Communication link failure: java.io.EOFException, underlying cause: null ** BEGIN NESTED EXCEPTION ** java.io.EOFException STACKTRACE: java.io.EOFException at 
com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394) at 
com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538) at 
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929) at 
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167) at 
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278) at 
com.mysql.jdbc.Connection.execSQL(Connection.java:2251) at 
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586) at 
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStat
ement.java:96) at 
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStat
ement.java:96) at configuration.Login.doPost(Login.java:104) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.jav
a:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at
 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403) at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301) at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java
:162) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java
:140) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
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) ** END NESTED EXCEPTION **

我发现在一段时间后由于某种原因关闭的汇集连接可能由于时间限制或某些原因而发生此错误。 我的问题是,当没有连接到池中时,连接池不应该创建新连接?错误不是由流量引起的,因为此时没有人使用该应用程序。如何修复此错误?当应用程序是部署我开始使用应用程序,正在创建池连接。这些连接是空闲的?这些连接有没有办法关闭?但如果我能做到这一点,我不会浪费服务器上其他应用程序的连接?

此外,如果我在创建新连接并且应用程序开始工作一段时间后继续尝试使用该应用程序。但这不正常.......

//如果我手动关闭来自MYSQL Admin的所有活动连接,则会再次显示此错误。

1 个答案:

答案 0 :(得分:1)

有背景连接。

如何定义游泳池?

以下是一些有用的选项。

minEvictableIdleTimeMillis="60000"maxActive="100" minIdle="10" maxIdle="50" maxWait="10000"
    removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"

并在网址中添加autoReconnect=true

url="jdbc:mysql://localhost:3306/db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" />