windows下Socket連結溢出

來源:互聯網
上載者:User

標籤:

最近在windows下使用通過多線程使用jdbc操作資料庫,線上程數設定為5,並且每個線程執行完成後Sleep(1000),在這種情況下,竟然還會報錯:

java.net.SocketException No buffer space available (maximum connections reached) JVM_Bind

一看這個錯誤類型,應該是屬於Socket串連沒有關閉或者一直在等待,因為我用的是jdbc去操作資料庫,並且是短串連的形式,也即每次執行一個操作就建立jdbc串連,操作完畢即關閉jdbc串連,而jdbc串連是基於Socket的,那麼問題應該就出現在jdbc串連資料庫上面了,再加上我使用的是原聲java編寫的程式,並沒有用任何架構以及web容器,所以並沒有jdbc串連池幫我控制jdbc串連的關閉。經過各種嘗試和google,發現可能是windows系統級Socket設定的原因。

解決方案如下:

1. 啟動登錄編輯程式。 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters

2. 建立

值名稱:MaxUserPort

實值型別: DWORD

值資料: 65534(十進位)

有效範圍: 5000 - 65534 (十進位)

預設: 0x1388 5000 (十進位)

建立

值名稱:TCPTimedWaitDelay

實值型別: DWORD

值資料: 30(這個表示TIME_WAIT的秒數)

 

其中最重要的是TCPTimedWaitDelay,如果一個Socket串連等待時間超過30秒,就關閉串連。

再次運行程式,現在將線程數設定為30,程式仍舊能正常運行。

 

windows下Socket連結溢出

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.