No buffer space available (maximum connections reached?): recv failed 问题

评分 0, 满分 5 星(4012 次阅读)
Loading...
添加评论

今天同事发来一个错误:

java.net.SocketException: No buffer space available (maximum connections reached?): recv failed
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(SocketInputStream.java:150)
 at java.net.SocketInputStream.read(SocketInputStream.java:121)
 at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
 at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
 at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)(文章来源 www.pms.cc)
 at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1960)

来自于mysql的一个异常,开始是怀疑是mysql的连接数问题。查了下是发现大量的close_wait的状态,应该是端口没用完了。

因此调了下mysql的连接数,第二是让调下TIME_WAIT状态的回收时间。这个时间默认是240S。如下:

1、my.ini里面加连接:max_connections=1000

2、修改Windows的参数:

1.启动注册表编辑器。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
2. 新建

值名称:MaxUserPort
值类型: DWORD
值数据: 65534(用十进制的方法写进去就可以,如果是十六进制,是FFFE,因为4个F是65535嘛)
有效范围: 5000 - 65534 (十进制)
默认: 0x1388 5000 (十进制)

3.新建

值名称:TCPTimedWaitDelay
值类型: DWORD
值数据: 0000001e(也就是30,不行可以用WINDOWS计算器,很方便,这个表示TIME_WAIT的秒数)(文章来源 www.pms.cc)

 

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: No buffer space available (maximum connections reached?): recv failed 问题
 
评分 4.6, 满分 5 星
Loading...
  
  1. akacd

    之前java做多线程条用数据库忘记把connection关掉就导致了连接数供给不上的情况,每个线程用完都关掉就没有什么问题了。