我想知道我对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设置为不同值的目的是什么?
答案 0 :(得分:3)
在某段时间内,只有40个连接正忙,当其中一个连接空闲时,它将被销毁,因为池几乎有30个(maxIdle)空闲连接。
当40个连接忙,其中一个空闲时,它变为空闲,导致以下状态:
39 busy connections
1 idle connection
maxActive
设置指定在任何给定时间在任何状态下可能存在的最大连接数。 maxIdle
设置更具体,仅确定最大空闲连接数。
假设maxActive
设置为100并且在某个时刻所有这些连接都存在并且正忙,那么如果几分钟之后它们都是空闲的,那么您不想保留这100个连接空闲连接,因为除了消耗资源之外他们没有做任何事情。
这是maxIdle
设置发挥作用的地方。它告诉连接池不能容纳超过X个空闲连接。如果设置为30,则丢弃100个空闲连接中的70个连接。