2017-10-12 130 views
2

我想知道我對Tomcat連接池生命週期的理解是否正確。瞭解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設置爲不同值的目的是什麼?

回答

1

在一段時間內,只有40個連接處於忙碌狀態,當其中一個連接閒置時,它將被銷燬,因爲連接池幾乎有30個(maxIdle)空閒連接。

當40個連接都忙和它們中的一個變成空閒,變得空閒,從而產生以下狀態:

39 busy connections 
1 idle connection 

maxActive設置指定可能存在的連接的最大數量,在任何狀態下,在任何時候。 maxIdle設置更具體,只確定最大空閒連接數量。

假設maxActive設置爲100,並且在某個點上所有這些連接都存在並且很忙,那麼如果幾分鐘後它們全部空閒,您不想保留這100個空閒連接,因爲它們除了消耗資源之外沒有做任何事情。

這就是maxIdle設置進場的地方。它告訴連接池不能保持X以上的空閒連接。如果它設置爲30,那麼100個空閒連接中的70個連接將被丟棄。

+0

感謝您的迴應,「如果它設置爲30,則會刪除100個空閒連接中的70個連接。」這意味着有70個連接被丟棄,並且30個連接現在處於空閒狀態,但是當所有30個連接都忙時,tomcat會創建新的連接,並在響應後自動空閒? –

+0

@АлмасАбдразак是的,當他們不再忙於工作時,所有連接都變得閒置,並且maxIdle設置決定了可能存在並且什麼都不做的連接的最大數量。 –