-

Windows time_wait过多解决办法

PHP

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

总结一下:遇到问题一定要先分析问题,从一些日志中寻找蛛丝马迹。多去借用互联网的力量。说不定很多问题你遇到的别人都遇到。还有最重要的一点就是要实践。这个方法不管对错,先去尝试一下,说不定就是解决问题的关键。

来源:Windows time_wait过多解决办法

14 评论 “Windows time_wait过多解决办法

    菊部 评论:
    2016年10月19日 下午9:45

    感谢分享

    一元云购源码 评论:
    2016年10月21日 上午9:20

    学习了~

    卢松松商城 评论:
    2016年10月21日 上午11:47

    学习了~多谢分享

    天下彩 评论:
    2016年10月24日 下午6:29

    谢谢分享,学习了

    365免单网 评论:
    2016年10月25日 下午4:06

    挺深奥的 支持下

    sunking 评论:
    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

    虽然不知道说的是什么,但看起来好厉害的样子!

    2ou 评论:
    2019年5月10日 下午10:30

    好文章!666,学习了

    61o 评论:
    2019年5月11日 上午12:19

    非常精彩的文章,引人入胜,痛快淋漓。感谢楼主分享。

    wh 评论:
    2020年8月11日 下午4:37

    你这个是真的坑啊,TcpTimedWaitDelay设置为0,重启直接蓝屏了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注