Windows time_wait过多解决办法
Windows Server2008 SP1 PHP程序访问出现SQL Server数据库时的错误: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。进到Windows Server2008系统,在命令行中使用netstat -ano >>D://ports.txt导出所有端口,发现大量的TIME_WAIT端口不能关闭和释放,导致网站连接SqlServer失败。TIME_WAIT数量过多,可能会引起网络性能下降,并占用系统非换页内存,而且会占用很多端口,会耗尽连接池的网络连接数,导致无法建立网络连接。下面雷雪松详细的讲解下Windows time_wait过多解决办法。
初步分析SqlServer连接满了,可能原因是磁盘满了、连接数设置太小了或者是PHP程序连接SqlServer数据库没有关闭连接。经过是排查发现并不是这些问题导致,想着重启SqlServer说不定能解决问题。重启SqlServer后使用netstat -ano 查看端口依然很多TIME_WAIT。然后想是否可以设置SqlServer TIME_WAIT连接回收时间。在网上找了很久没有看到SqlServer的配置,只看到Windows设置注册表。亲测一下,发现还真是生效了。具体配置如下:
Windows time_wait过多解决办法解决办法:
修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的DWORD键,设置为十进制0,以缩短TIME_WAIT的等待时间。
Windows下的调整方法为
HKEY_LOCAL_MACHINE/CurrentControlSet/Services/Tcpip/Parameters下的以下三个参数:
KeepAliveInterval,设置其值为6000(单位为毫秒,6000代表6秒)
KeepAliveTime,设置其值为300000(单位为毫秒,300000代表5分钟)
TcpMaxDataRetransmissions,设置其值为5
总结一下:遇到问题一定要先分析问题,从一些日志中寻找蛛丝马迹。多去借用互联网的力量。说不定很多问题你遇到的别人都遇到。还有最重要的一点就是要实践。这个方法不管对错,先去尝试一下,说不定就是解决问题的关键。
2016年10月19日 下午9:45
感谢分享
2016年10月21日 上午9:20
学习了~
2016年10月21日 上午11:47
学习了~多谢分享
2016年10月24日 下午6:29
谢谢分享,学习了
2016年10月25日 下午4:06
挺深奥的 支持下
2016年10月25日 下午9:49
您好,我想请教一下您,蓝灯我使用的专业版,为什么无法打开网页啦;原先免费版是可以打开的;麻烦啦
2016年11月8日 下午2:25
博主做了广告联盟?
2016年11月9日 上午10:29
多谢程序员分享,感谢指点。
2016年11月9日 上午11:24
有没有研究过close_wait过多的问题。
2019年5月5日 下午7:39
哇塞,居然是沙发?留个名
2019年5月9日 下午9:00
虽然不知道说的是什么,但看起来好厉害的样子!
2019年5月10日 下午10:30
好文章!666,学习了
2019年5月11日 上午12:19
非常精彩的文章,引人入胜,痛快淋漓。感谢楼主分享。
2020年8月11日 下午4:37
你这个是真的坑啊,TcpTimedWaitDelay设置为0,重启直接蓝屏了