0

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

 <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,但一切都是徒劳的。

4

2 回答 2

0

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

于 2012-06-06T02:39:02.470 回答
0

是否在全局或应用程序级别上进行了配置?查看Mark Thomas在 Apache Tomcat 上要避免的 4 个错误context.xml,了解如何将错误放置在错误的位置会创建比您预期更多的连接。长话短说:

  • 如果您在全局中配置池,context.xml您将获得每个应用程序的池
  • 如果您在应用程序中配置池,context.xml您只会得到一个池
  • 如果你想在应用程序之间共享一个全局池,你必须使用资源链接
于 2012-05-30T05:39:48.543 回答