web服务器端大量tcp_close_wait,如何清除无用的连接?

web服务器端大量tcp_close_wait,如何清除无用的连接?,第1张

第一步:安装IIS

A选择“添加/删除程序”控制面板中,选择显示在对话框中的“添加/删除Windows组件”。

B在出现选择安装Internet信息服务(IIS)复选框,此组件是关于空间19MB。

C单击“下一步”和Win2000安装光盘插入CD-ROM驱动器,安装程序将程序文件复制到硬盘驱动器,点击“Finish”完成。

第二步:

A打开IIS服务器的配置窗口中选择“启动:在IIS Web服务器的基本配置

IIS Web服务器包括以下几个部分基本配置“→”程序“→”管理工具“→”Internet服务管理器“或”选择“→”控制面板“→”管理工具“→”Internet服务管理器“也可,打开的窗口。

B在打开右键单击“默认Web站点”,选择“属性”菜单中的窗口。

C在“默认Web站点属性”窗口中,选择“主目录”选项卡,在硬盘上建立一个Web内容的位置,默认目录为“C:\ inetpub \ >当TIME_WAIT超过linux系统tw数量的阀值(可用数量不会大于65535),系统会把多余的time-wait socket 删除掉,并且显示警告信息,如果是NAT网络环境又存在大量访问,会产生各种连接不稳定断开的情况,从而影响了服务的稳定性。

一、状态的产生

要解决TIME_WAIT状态过多的问题,先来研究下TIME_WAIT状态的产生,下面是TCP连接断开时的四次挥手状态转换图,说明一点,途中显示的是客户端主动断开连接,tcp连接也可以由服务器端主动断开连接。我们先来描述一下断开的状态:

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命,RFC规定一个MSL为2min,linux中一般设置为30s)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

可以看到TIME_WAIT状态产生是在tcp连接主动关闭的一端产生的正常tcp状态,超过两个MSL之后,就会关闭,释放占用的端口。基于以上的分析我们可以推断,在我们的应用中产生大量TIME_WAIT状态的根本原因是频繁创建断开连接TCP连接。要解决TIME_WATIT状态过多的问题,就要分析我们的应用把频繁创建的短连接改为长连接。

二、常见的短连接产生的场景

1服务连接服务

后台业务服务器,通常需要调用redis、mysql以及其他>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13414794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存