1. 程式人生 > >Weblogic連線池屬性(PinnedToThread )導致連線池連線不斷增長

Weblogic連線池屬性(PinnedToThread )導致連線池連線不斷增長

最近專案遇到棘手的問題,weblogic連線池不斷增長導致連線爆滿。

後來經過仔細查詢發現weblogic連線池設定勾選了PinnedToThread 屬性導致的,下面先看下官方對這個屬性的介紹吧:

PinnedToThread 是一個能夠改善效能的選項,它啟用執行執行緒以保持已入池的資料庫連線,即使在應用程式關閉邏輯連線之後。

啟用 PinnedToThread 後,WebLogic Server 將在應用程式首次使用某個執行執行緒保留連線時將連線池中的一個數據庫連線固定到此執行緒。當應用程式使用完此連線並呼叫 connection.close() (此方法在其他情況下會將連線返回到連線池) 時,WebLogic Server 會將該連線保留給執行執行緒,而不會將其返回連線池。當此後某個應用程式使用相同的執行執行緒請求連線時,WebLogic Server 將提供此執行緒已保留的這個連線。

使用 PinnedToThread,當多個執行緒嘗試同時保留一個連線時,連線池上不會發生鎖定衝突,對於試圖在有限個數的資料庫連線中保留同一個連線的執行緒,也沒有衝突。

如果應用程式使用相同的執行執行緒同時保留連線池中的多個連線,WebLogic Server 將建立附加的資料庫連線並同樣將它們固定到此執行緒。

上面的介紹的大體意思就是如果勾選了這個屬性weblogic會為您應用裡面的每一個執行緒夠繫結一個連線池裡面的連結。如果在應用中不斷new新的執行緒而連線池就會不斷增長。

這個屬性對於一個執行緒重複利用很多次的應用來說確實效率帶來了提高,但是如果應用不斷new新的執行緒就會導致連線池連線不斷增長。可能有人會問執行緒做完了事情會被gc銷燬,這個屬性還會為銷燬的執行緒繫結連結嗎?weblogic有執行緒管理。至於以上是為什麼還需要繼續探究,也希望高人看了。有知道的回答我下。嘿嘿!