Tomcat连接池的maxActive与maxIdle有什么区别?

时间:2012-02-26 09:03:09

标签: tomcat database-connection

tomcat连接池有一个名为maxActive的设置和一个名为maxIdle的设置我的问题是。

  1. 这两个设置有什么区别?
  2. 您可能拥有与maxIdle不同的maxActive值的真实示例场景是什么?
  3. 由于某种原因,文档对我没有意义。根据以下文档,apache dbcp和tomact 7 jdbc-pool上都存在maxActive和maxIdle http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

      

    maxActive(int)可以的最大活动连接数   同时从此池中分配。默认值为100

         

    maxIdle(int)应保留的最大连接数   在游泳池里随时都有。默认值为maxActive:100空闲   定期检查连接(如果已启用)和连接   闲置时间超过minEvictableIdleTimeMillis将被释放。   (另见testWhileIdle)

4 个答案:

答案 0 :(得分:32)

maxActive很直接。 maxIdle可以用这种方式解释 - 假设你有100个最大活动连接,并说你将maxIdle设置为80.假设没有请求进入数据库,将只测试80个连接(通过验证查询)并保持活动状态。其他20个将被关闭。所以在任何时候你都只能有80个空闲连接 您可能希望将此值设置为不同的数字,以防止其他(不必要的)连接进入数据库。因为数据库服务的每个连接都消耗资源(如内存) 但是,假设您已将maxActive大小设置为100且几乎所有时间都在使用100,那么此设置显然无关紧要。

答案 1 :(得分:14)

maxActive

the maximum number of active connections that can be allocated from this pool at the same time.  

此属性用于限制池可以打开的连接数。

了maxidle

(int) The maximum number of connections that should be kept in the pool **at all times.** 

这是为了限制空闲连接。不会释放连接(不大于maxIdle的值),以便下一次连接请求会更快。

总之,maxActive是限制最大连接数。

但是空闲(maxIdleminIdle)更多是性能问题(与空间/资源的交换时间),其中,maxIdle是限制你的最大连接数(资源)与...交换时间。

答案 2 :(得分:4)

在小型环境中,与数据库的连接不是问题,因为没有那么多连接,服务器资源几乎完好无损。在大型环境中,与数据库的连接数消耗了大量资源,因此,您需要优化管理数据库连接的方式,使用较少的连接数将为您提供更好的性能。此时,maxActive设置该池可以对数据库建立的最大连接数,从而限制分配给请求者的资源。使用maxIdle指定,如果连接“空闲”,它将被关闭,除非有最小的“maxIdle”连接。为什么不小于maxIdle ?,因为你需要一些连接来为数据库的下一个请求做好准备,所以如果必须填充池,你不需要再打开和关闭这么多的连接,所以,你释放了大量的资源

答案 3 :(得分:1)

假设您将属性定义为

maxActive = 100

实质上是

Size of the pool = maxActive = 100

仅存在 maxActive

的问题
Size of pool under heavy load = maxActive
Size of pool under no/low load = maxActive

即使没有负载(none of the connections are actually in use),所有100个连接都在消耗资源

您绝对可以将 maxActive 降低为80。但是这样做还意味着您将在重负载(when application is consuming all available connections)期间将可用连接的上限降低到80。

因此,您将 maxActive 用作池的大小

maxIdle 如何解决上述问题

假设您已将属性定义为

maxActive = 100
maxIdle = 80

从本质上讲

Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80

maxIdle 使连接池具有适应负载的灵活性。 在高负载(number of connections-in use > maxIdle)下, maxActive 是唯一确定连接池大小的属性

但是在无负载(number of connections in-use < than maxIdle)期间, maxIdle 确定连接池的大小

因此maxIdle的正确值可确保连接池不会对性能造成不必要的影响。