了解Tomcat连接池设置

时间:2017-10-12 06:22:40

标签: java tomcat database-connection

我想知道我对Tomcat连接池生命周期的理解是否正确。

例如,我有以下设置:

<Resource name="jdbc/appname" auth="Container"
type="javax.sql.DataSource" maxActive="100" 
maxIdle="30" maxWait="1000"
username="username" 
initialSize = "5"
password="password"
driverClassName="jdbc.driver.name"
url="jdbc:protocol://hostname:port/dbname"/>

当我的应用程序部署时,它有5个连接(初始大小),当所有这些连接忙于tomcat创建并添加到池中的新连接(6)时,这个新的连接限制是maxActive(100),当101个请求是即将到来,tomcat将等待1000毫秒(maxWait),然后抛出TimeOutException。在某段时间内,只有40个连接正忙,当其中一个连接空闲时,它将被销毁,因为池几乎有30个(maxIdle)空闲连接。我对吗?

如果我是,那么将maxIdle和maxActive设置为不同值的目的是什么?

1 个答案:

答案 0 :(得分:3)

  

在某段时间内,只有40个连接正忙,当其中一个连接空闲时,它将被销毁,因为池几乎有30个(maxIdle)空闲连接。

当40个连接忙,其中一个空闲时,它变为空闲,导致以下状态:

39 busy connections
1 idle connection 

maxActive设置指定在任何给定时间在任何状态下可能存在的最大连接数。 maxIdle设置更具体,仅确定最大空闲连接数。

假设maxActive设置为100并且在某个时刻所有这些连接都存在并且正忙,那么如果几分钟之后它们都是空闲的,那么您不想保留这100个连接空闲连接,因为除了消耗资源之外他们没有做任何事情。

这是maxIdle设置发挥作用的地方。它告诉连接池不能容纳超过X个空闲连接。如果设置为30,则丢弃100个空闲连接中的70个连接。