在windows服務器上面批量處理數據的時候,遇到下面的異常,意思是說連接數用完了,無法再建立連接。com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).
at sun.reflect.GeneratedConstructorAccessor16.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
默認情況下,Windows 允許用於使用5000 個臨時(短命)TCP 端口。任何端口關閉后,它將在TIME_WAIT 狀態保持120 秒。與重新初始化全新的連接相比,該狀態允許以更低的開銷重新使用連接。 但是,在該時間逝去前,無法再次使用該端口。
對於小的可用TCP 端口堆棧(5000 ),以及具有TIME_WAIT 狀態的大量在短時間內打開和關閉的 TCP 端口,你很可能遇到端口耗盡問題。
我們可以通過修改注冊表配置來解決問題:
1,啟動注冊表編輯器(Regedt32.exe )。
2,在注冊表中確定下述鍵值的位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在“編輯”菜單上點擊“添加值”,然后增加下述注冊值:
Value Name: MaxUserPort
Data Type: REG_DWORD
Value: 65534
它用於設置為任何用戶提供的臨時端口數。有效范圍介於5000 和65534 之間(十進制)。默認值為0x1388 (5000 ,十進制)。
3,在“編輯”菜單上點擊“添加值”,然后增加下述注冊值:
Value Name: TcpTimedWaitDelay
Data Type: REG_DWORD
Value: 30
它用於設置關閉之前將TCP 端口連接保持在TIME_WAIT 狀態的秒數。 有效范圍介於0 秒和300 秒之間。默認值為0x78 (120 秒)。
4,退出注冊表編輯器。
5,重啟服務器。