TCP协议--CLOSE_WAIT状态

转载 2015年07月07日 11:02:50

1.服务器异常

如果服务器出了异常,十之八九都是以下两种情况:

1.服务器保持了大量TIME_WAIT状态

2.服务器保持了大量CLOSE_WAIT状态


因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,一旦达到句柄数上限,新的请求就无法被处理了,接着应用程序可能返回大量Too Many Open Files异常。


2.Close_Wait引发的问题
Close_Wait会占用一个连接,网络可用连接小。数量过多,可能会引起网络性能下降,并占用系统非换页内存。 尤其是在有连接池的情况下(比如HttpRequest)
会耗尽连接池的网络连接数,导致无法建立网络连接。

3.解决方法

下面来讨论下这两种情况的处理方法,优化系统内核参数解决TIME_WAIT可能很容易,可以通过修改/etc/sysctl.conf文件解决;

但是应对CLOSE_WAIT的情况还是需要从程序本身出发。因为发生TIME_WAIT的情况是服务器自己可控的,要么就是对方连接的异常,要么就是自己没有迅速回收资源,总之不是由于自己程序错误导致的。从上面的图可以看出来,如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方关闭连接之后服务器程序自己没有进一步发出FIN信号,一般原因都是TCP连接没有调用关闭方法换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。这种情况,通过服务器内核参数也没办法解决,服务器对于程序抢占的资源没有主动回收的权利,除非终止程序运行,一定程度上,可以使用TCP的KeepAlive功能,让操作系统替我们自动清理掉CLOSE_WAIT连接

tcp中close_wait状态出现的原因

close_wait出现的原因: 就是某一方在网络连接断开后,对等方没有检测到这个错误(对方断开)而没有调   用 closesocket,导致了这个状态的出现.模拟这样一个环境:服务器192.168...
  • lllxy
  • lllxy
  • 2007年09月10日 22:08
  • 8325

TCP协议--CLOSE_WAIT状态

1.服务器异常如果服务器出了异常,十之八九都是以下两种情况:1.服务器保持了大量TIME_WAIT状态2.服务器保持了大量CLOSE_WAIT状态因为linux分配给一个用户的文件句柄是有限的,而TI...
  • xifeijian
  • xifeijian
  • 2015年03月26日 20:38
  • 16715

TCP连接大量CLOSE_WAIT状态问题排查

CLOSE_WAIT产生原因  close_wait是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,链接进入close_wait状态。但如果服务...
  • yangguosb
  • yangguosb
  • 2018年01月18日 13:48
  • 42

TCP/IP详解--连接状态变迁图CLOSE_WAIT

终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭...
  • yusiguyuan
  • yusiguyuan
  • 2014年03月18日 10:33
  • 5884

深入浅出TCP之半关闭与CLOSE_WAIT

终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭...
  • realmeh
  • realmeh
  • 2014年01月13日 23:32
  • 3564

TCP连接TIME_WAIT和CLOSE_WAIT状态

1 TCP连接中的状态 图1 TCP连接和断开的过程图1.1 名词解释 状态 含义 LISTEN 服务器在等待进入呼叫 SYN_RECV 一个连接请求已经到达,等待确认 ...
  • renwotao2009
  • renwotao2009
  • 2016年03月02日 15:57
  • 2206

TCP CLOSE_WAIT 过多解决方案

一、“多半是程序的原因”?这个还是交给程序猿吧 二、linux 下 CLOSE_WAIT过多的解决方法 情景描述:系统产生大量“Too many open files”  原因分析:在服务器与客...
  • wwd0501
  • wwd0501
  • 2017年11月30日 11:28
  • 304

关于TCP链接出现CLOSE_WAIT的解决

这篇记录本来是准备和上一篇记录一起发的,但是感觉太长了。所以单独写开来了。 今早来的时候主程说服务器好像有问题,给了我一张截图: 我一看全是CLOSE_WAIT。就是说服务器被动关闭TCP...
  • u013172206
  • u013172206
  • 2014年01月07日 17:26
  • 1622

Linux socket通信出现CLOSE_WAIT状态的原因与解决方法

这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题。说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP...
  • lubing20044793
  • lubing20044793
  • 2014年06月11日 21:51
  • 1761

TCP连接状态:CLOSE_WAIT和TIME_WAIT

1  CLOSE_WAIT状态的生成原因 CLOSE_WAIT状态的生成原因  首先我们知道,如果我们的Client程序处于CLOSE_WAIT状态的话,说明套接字是被动关闭的! 因为如果是Serve...
  • ajupiter
  • ajupiter
  • 2013年07月08日 16:06
  • 3108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP协议--CLOSE_WAIT状态
举报原因:
原因补充:

(最多只允许输入30个字)