`

MSSQL导致java.net.BindException异常的解决方法

    博客分类:
  • java
阅读更多

昨天同事写了一个程序,使用jdbc频繁访问数据库,导致MSSQL导致java.net.BindException: Address already in use: connect,这是由于connection.close的时候,底层的socket不会立即关闭而是等待time_wait的时间,

 

当大量创建连接,然后再关闭的时候很容易出现这个问题:

 

今天帮其解决了,解决办法是:打开端口上线,65535和连接断开等待时间

 

开启端口上线和连接等待时间方法:原文

 

 

需要对注册表做如下配置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
下添加项
1)MaxUserPort 
缺省是5000 (十进制)
可以设置为最大65535 (十进制)
端口。
2)TcpTimedWaitDelay
缺省是240 (十进制)
可以设置为最小30 (十进制)
重启计算机


(TcpTimedWaitDelay描述:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注册表子键并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。 停止并重新启动系统。缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。 建议值:最小值为 0x1E,它将等待时间设置为 30 秒。

MaxUserPort 描述:确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。停止并重新启动系统。 缺省值:无 建议值:至少十进制 32768。)

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics