系统缓冲区空间不足或者队列已满,不能执行套接字上的操作
之前从没有用过windows server 2012 r2的服务器, 有个新的合作方需要部署这个服务器,部署完毕之后发现在测试的时候出现‘系统缓冲区空间不足或者队列已满,不能执行套接字上的操作 ’ 。
然后我开始查资料发现服务器的端口号被占用 , 队列已满了。
于是我开始在服务器上进入命令指令符, 输入 netstat -ano查找端口使用情况 。 发现有个pid进程为0的 状态为time_wait的一个程序占用了大量的端口号。
随后我去任务管理器里面去查找这个pid为0的进程,发现是系统自带的进程 无法处理。
进程无法结束还是解决不了问题。于是我开始查找TCP协议的有关资料, 发现他们对time_wait的解释是这样的 。 time_wait状态下windows系统默认4分钟释放这个状态关闭连接目的是为了网络波动下确保数据的完整性,
于是我在关于tcp协议下找到了关于这个状态的属性值TcpTimedWaitDelay。这个值范围是0-300缺省值默认240 于是我进入注册表路径。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters,
查看这个值发现没有这个属性, 那么它应该就是系统缺省了,
那我就给他新建一个这个属性定义。
设置为30
设置完毕, 重启电脑, TCP会30秒自动释放一次连接。
这种设置对于高并发会有一定的帮助,
最后附上几个我查询的引用博客, 希望能帮到你们。
TCP属性解析
https://blog.csdn.net/niejiangshuai/article/details/86573338