【问题标题】:Understanding the Tomcat Connection Pool settings了解 Tomcat 连接池设置
【发布时间】:2018-03-23 23:42:05
【问题描述】:

我想知道我对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 ms(maxWait) 然后抛出 TimeOutException。在某个时间段内,只有 40 个连接处于忙碌状态,当其中一个空闲时,它将被销毁,因为池中几乎有 30(maxIdle)个空闲连接。我对吗?

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

【问题讨论】:

    标签: java tomcat database-connection


    【解决方案1】:

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

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

    39 busy connections
    1 idle connection 
    

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

    假设maxActive 设置为 100,并且在某一时刻所有这些连接都存在并且处于忙碌状态,那么如果几分钟后它们都处于空闲状态,您不想保留这 100 个空闲连接,因为除了消耗资源,他们什么都不做。

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

    【讨论】:

    • 感谢回复,“如果设置为 30,则 100 个空闲连接中的 70 个连接被丢弃。”这意味着70个连接被丢弃,现在有30个连接空闲,但是当所有30个连接都忙时,tomcat会创建新连接,响应后它会自动空闲?
    • @АлмасАбдразак 是的,所有连接在不再忙于工作时都会变为空闲状态,而 maxIdle 设置决定了可能存在但什么也不做的最大连接数。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多