No buffer space available

Java項目報錯:編輯器

[http-8080-2]org.hibernate.util.JDBCExceptionReporter[11:23:34]SQL Error: 0, SQLState: 08S01
[http-8080-2]org.hibernate.util.JDBCExceptionReporter[11:23:34]經過端口 1433 鏈接到主機 *** 的 TCP/IP 鏈接失敗。錯誤:「No buffer space available (maximum connections reached?): connect。請驗證鏈接屬性,並檢查 SQL Server 的實例正在主機上運行,且在此端口接受 TCP/IP 鏈接,還要確保防火牆沒有阻止到此端口的 TCP 鏈接。」。

環境:Windows Server 2008 R2 Standard,SQL Server 2008 R2spa

其餘環境正常,肯定不是Java項目的問題,應該是系統的問題,在網上查找資料 No buffer space availablehibernate

  1. 啓動註冊表編輯器。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  2. 新建 值名稱:MaxUserPort 值類型: DWORD 值數據: 65534(用十進制的方法寫進去就能夠,若是是十六進制,是FFFE,由於4個F是65535嘛) 有效範圍: 5000 - 65534 (十進制) 默認: 0x1388 5000 (十進制)
  3. 新建 值名稱:TCPTimedWaitDelay 值類型: DWORD 值數據: 0000001e(也就是30,不行能夠用WINDOWS計算器,很方便,這個表示TIME_WAIT的秒數)

修改完成後重啓Java項目服務,服務恢復正常,再也不出現以前的報錯。code

可是,blog

這裏只是把最大端口數改到了最大,正常狀況下是不會建立出這麼多端口的。 經過一下命令能夠統計出SQL Server開啓的端口總數ip

netstat -ano | find "TIME" | find /C"1433"

執行此命令後發現,佔用總數達到了17657個,隨着時間增加這個數字還在增加,並且不會釋放!那麼問題來了,再運行一段時間,端口數達到了65534個的時候,仍是會報錯的,這個只是時間的問題。 繼續查找資料 在系統啓動時從 497 天后全部在TIME_WAIT狀態的 TCP/IP 端口都不會被關閉。 症狀get

系統運行時間

機器已經運行500多天了,按照官方指導安裝了對應的修復程序,重啓機器後,再次統計SQL Server佔用端口的狀況,發現能夠正常回收了。 要想驗證安裝的這個修復程序是否起效只能等到500天后了:)it

相關文章
相關標籤/搜索