程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle 和c3p0 數據庫的Time_Wait 過多問題的一個解決方案。,

oracle 和c3p0 數據庫的Time_Wait 過多問題的一個解決方案。,

編輯:Oracle教程

oracle 和c3p0 數據庫的Time_Wait 過多問題的一個解決方案。,


項目是B/S模式,放在linux服務器上,tomcat和oracle11g在一台服務器上,tomcat讀取數據庫采用C3P0連接池,一直比較穩定,所以也沒有去管。後來把tomcat放在一台win2008下,數據庫放在另外一台win2008下。運行了半月有余,期間經常報數據庫連接錯誤,但刷新下頁面也就好了。因為是偶發問題,也沒有去關注。終於有一天徹底報錯進不了了,報錯截圖如下:

大意是與數據庫連接有問題。這才慌慌的打開數據庫服務器查看原因。數據庫貌似正常,但用sqlplus連接不上,報超過最大連接數。於是用netstat -ano ,本意是想看看監聽端口是否正常監聽。未曾想出現了四百多條 1521端口 的time_wait信息:

難怪數據庫連不上,於是就暫時先把數據庫重啟了下。查看了半個小時,數據庫連接保持在50左右,以為正常了。到了下午,放心不下,又上服務器查看了一下,乖乖,又有200多條TIME_WAIT。還好發現的早,不然過幾天肯定又得出問題。遂谷歌百度搜索一陣,貌似這個問題國內外出現不少,按照一個簡單的解決方法:

在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名為TcpTimedWaitDelay的
DWORD鍵,設置為60,以縮短TIME_WAIT的等待時間

同時添加 MaxUserPort 值為 65534

之後一直就沒再出現過這個問題。我就一直納悶了,配置都差不多,難道是win系統和linux系統性能差別,我想也不可能啊,不能差這麼多。這事就一直放在心上,有天突然想起,原來linux下是因為web和數據庫放在同一台服務器上,web和數據庫是通過本地進程通訊,沒涉及到tcp協議。而後來win系統是分開兩台,兩台低層是通過TCP交流數據。由於win系統的一些默認設置,導致數據庫連接池用完後沒有及時釋放TCP的空閒數據庫連接。TCP連接就一直持續增加,慢慢超過了限制。配置了TcpTimedWaitDelay 後,TCP連接在空閒60秒後會自動釋放。因此,一般情況下就保持著50個左右的穩定連接。

我想應該是如此,有時候看著數據庫池好用,但其實還是對低層做了一個包裝。低層的設置還是要配置一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved