码迷,mamicode.com
首页 > Windows程序 > 详细

windows下Socket链接溢出

时间:2015-01-06 15:29:04      阅读:251      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!