tomcat池没有重置池。获得太多连接错误

时间:2012-05-30 03:51:26

标签: java tomcat jdbc connection-pooling

我在tomcat 6上使用tomcat pool。以下是我的资源定义:

 <Resource name="jdbc/DBConnectionFactory"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
         password="root"
        removeAbandoned="true"
        removeAbandonedTimeout="600"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/sicad?autoReconnect=true"
               minIdle="3"
       maxActive="250"
       testWhileIdle="true"
       validationQuery="SELECT 1"
            maxIdle="10"
           timeBetweenEvictionRunsMillis="10000"
           minEvictableIdleTimeMillis="10000"
              maxWait="-1"
     />

现在,理想情况下,在进入250个连接后,应删除所有空闲连接,或者至少通过某种方式mysql不应该提供太多的连接错误。此外,请注意,如果我执行showprocesslist,几乎没有任何并发​​查询正在进行。所以我认为timeBetweenEvictionRunsMillis应该做的就是删除空闲连接并保持池活着。但是一旦设置了250个连接,mysql就会开始抛出太多的连接错误。我原以为tomcat池会删除池中的任何空闲连接以保持池大小合理。还要注意的是,并没有创造出这么多。

更糟糕的是,同样的配置适用于开发人员计算机和登台服务器+测试服务器,但不适用于产品服务器。所有机器都是彼此的克隆。我重新启动了机器,重新安装了mysql,但一切都是徒劳的。

2 个答案:

答案 0 :(得分:0)

是在全局或应用程序级别配置了吗?查看Mark Thomas的4 Mistakes To Avoid On Apache Tomcat,了解如何将context.xml置于错误的位置可以创建比您想要的更多的连接。长话短说:

  • 如果您在全局context.xml中配置池,则每个应用程序都会获得一个池
  • 如果在应用程序context.xml中配置池,则只能获得一个池
  • 如果您希望在应用程序之间共享全局池,则必须使用resource links

答案 1 :(得分:0)

没有任何效果,最终放弃了硬件和相同的代码库,驱动程序和mysql安装工作。