首页 > Windows开发 > 详细

windows下Socket链接溢出

时间:2015-01-06 15:28:15      阅读:369      评论:0      收藏:0      [点我收藏+]

最近在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链接溢出

原文:http://www.cnblogs.com/edwinchen/p/4206066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!