首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebLogic 9.2 連線池當前連接數小於初始值的根因分析

     編輯:Java 相關知識

客戶發現 WebLogic 9.2 連線池監控中,當前連接數低於初始連接數,直覺以為初始化失敗。經日誌分析發現,問題源於連線池曾被停用。本文深入剖析停用機制與自動恢復過程中導致連接數異常的原因。

連線池為何被停用?

手動暫停、資料庫關閉、網路不穩等均可觸發停用。客戶日誌顯示大量 java.net.SocketException: 管道已斷開 及 ResourceDisabledException,排除人為操作後,判定為網路波動導致連線中斷,進而觸發停用邏輯。

核心控制參數

  • CountOfTestFailuresTillFlush:連續測試失敗達閾值(預設 2,即失敗 3 次)後清空連線池,狀態維持 Running。
  • CountOfRefreshFailuresTillDisable:連續刷新失敗達閾值(預設 2)後將池狀態設為 Suspend,拒絕新連線請求。

兩者均為「連續」失敗計數,成功操作即重置歸零。Flush 允許客戶端保留申請連線(嘗試重建),Disable 則直接拋出異常拒絕服務。

自動恢復與連接數異常復現

WebLogic 內建健康檢查,每 5 秒嘗試重建連線。復現步驟:

  1. 配置 Initial Capacity 15,Capacity Increment 20 的 DataSource。
  2. 啟動後 Current Capacity 為 15。關閉資料庫,連續 3 次測試失敗,池進入 Suspend,Current Capacity 歸零。
  3. 重啟資料庫,健康檢查成功建立 1 條連線,池恢復 Running,Current Capacity 變為 1。
  4. 模擬 2 用戶併發,首用戶取得連線,次用戶觸發擴容,池一次新增 20 條連線,Current Capacity 變為 21,超過初始值 15。

連線池停用狀態 連線池停用詳情 連線池自動恢復 連線池恢復詳情 併發擴容後連接數

解決方案

透過 internal-properties 調大失敗閾值,避免因網路抖動誤觸發停用:

<internal-properties>
  <property>
    <name>CountOfTestFailuresTillFlush</name>
    <value>10</value>
  </property>
  <property>
    <name>CountOfRefreshFailuresTillDisable</name>
    <value>20</value>
  </property>
</internal-properties>

根本解決仍需透過網路分析工具定位並修復網路不穩問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved