2012-08-01 102 views
1

使用SQLServer 2008數據庫在Websphere Application Server 7上運行我的應用程序。當SQLServer處於100%時,每個連接都掛起並填充連接池。這導致每個線程也掛起。 10分鐘後,日誌填滿了:爲什麼連接不超時?

00000042 ThreadMonitor W WSVR0605W: Thread "WebContainer : 11" (00000049) has been active for 742352 milliseconds and may be hung. There is/are 14 thread(s) in total in the server that may be hung. 

連接池正在使用JTDS並且超時設置爲300秒。

我會在300秒後按下每個連接都會拋出一個異常,然後使所有線程解除掛起?

回答

2

爲什麼連接會在300秒後拋出異常?如果連接對象正在使用中,它將繼續處於活動狀態。

還指定您指的確切的超時屬性?

+0

它被稱爲「連接超時」,這是它的文檔:指定連接請求保持活動的秒數,之後WebSphere Application Server發出ConnectionWaitTimeout異常。僅當您設置最大池大小屬性時,應用程序服務器纔會對此值執行操作。 – Tommy 2012-08-02 13:53:21

2

這裏是Connection Timeout定義:

該值表示的是一個連接請求 等待時,有空閒池中沒有可用的連接並沒有 新連接創建的秒數。這通常發生是因爲特定連接池中連接的最大值 已達到 。

例如,如果連接超時設置爲300,並且連接數的最大值爲 都在使用中,則池管理器將等待300秒鐘以使物理連接變爲可用狀態。如果在此時間內物理連接不可用,池管理器 將啓動ConnectionWaitTimeout異常。

所以,它不會使'所有線程都不掛起',它只會在300秒後告訴你池中沒有空閒連接,所以它不能給你一個。

控制事務保持活動狀態的時間長度的參數被稱爲transaction timeout,之後事務被標記爲回滾。但即使這個超時並不會取消使用連接的線程,它只會將其標記爲僅回滾。爲了釋放連接,您必須使用第三方工具(ITCAM可以取消服務器中的任何線程),或者從數據庫端終止/斷開連接。

+0

Tommy as Kurtcebe說,超時是新請求等待連接池的時間。如果連接池已滿並且新線程需要數據庫連接,則服務器將等待300秒以提供來自池的新連接(希望當前用戶之一將連接釋放回池)。這隻會影響新的請求者。如果當前線程繼續使用連接,則App Server不會終止這些線程。希望澄清。 – Manglu 2012-08-02 23:55:22

+0

@Tommy,我還想在這裏提到,等待5分鐘以獲得數據庫連接的線程很可能是一個非常糟糕的配置。考慮將其改爲合理的值 – Manglu 2012-08-06 06:58:55