多线程频繁操作MSSQL导致java.net.BindException异常的解决方法

在多线程环境下频繁操作MSSQL数据库可能导致java.net.BindException异常,由于TIME_WAIT状态的TCP连接占用过多端口。解决方法包括修改注册表增加MaxUserPort和减小TcpTimedWaitDelay,以及程序中让线程适当休眠。此外,优化程序设计,如避免频繁操作、及时释放资源和使用连接池,是更根本的解决方案。
摘要由CSDN通过智能技术生成
 现象:
[1]多线程启动频繁操作MSSQL,抛出

到主机  的 TCP/IP 连接失败。 java.net.BindException: Address already in use: connect

[2]在服务器上,执行netstat -a,可以看到很多TCP  TIME_WAIT
很多端口被占用
类似下面的:
TCP    127.0.0.1:1025         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1026         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1027         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1028         127.0.0.1:1433         TIME_WAIT
......
TCP    127.0.0.1:4998         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:4999         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:5000         127.0.0.1:1433         TIME_WAIT

开始,我跑2个线程都有问题,过一会程序就抛上面的异常。

我现在用了一个可行的方案,不是最好的方案。
两步操作:
[1]通过修改注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值