系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT。

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

TIME_WAIT 297
ESTABLISHED 53
CLOSE_WAIT 5

解释
TIME_WAIT:表示主动关闭,通过优化系统内核参数可容易解决。
CLOSE_WAIT:表示被动关闭,需要从程序本身出发。
ESTABLISHED:表示正在通信

TIME_WAIT(通过优化系统内核参数可容易解决)

TIME_WAIT是主动关闭连接的一方保持的状态,对于服务器来说它本身就是“客户端”,在完成一个爬取任务之后,它就会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。为什么要这么做?明明就已经主动关闭连接了为啥还要保持资源一段时间呢?这个是TCP/IP的设计者规定的,主要出于以下两个方面的考虑:
1.防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
2.可靠的关闭TCP连接。在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。另外这么设计TIME_WAIT 会定时的回收资源,并不会占用很大资源的,除非短时间内接受大量请求或者受到攻击。
解决方案很简单,通过修改/etc/sysctl.conf文件,服务器能够快速回收和重用那些TIME_WAIT的资源

#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout=30

生效,如下命令

/sbin/sysctl -p

CLOSE_WAIT(需要从程序本身出发)

TCP状态转移要点

   TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源.客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED服务器TCP状态迁移:CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED但是CLOSE_WAIT就不一样了,如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方关闭连接之后服务器程序自己没有进一步发出ack信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。个人觉得这种情况,通过服务器内核参数也没办法解决,服务器对于程序抢占的资源没有主动回收的权利,除非终止程序运行。什么情况下,连接处于CLOSE_WAIT状态呢?答案一:在被动关闭连接情况下,在已经接收到FIN,但是还没有发送自己的FIN的时刻,连接处于CLOSE_WAIT状态。通常来讲,CLOSE_WAIT状态的持续时间应该很短,正如SYN_RCVD状态。但是在一些特殊情况下,就会出现连接长时间处于CLOSE_WAIT状态的情况。答案二:出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接。代码需要判断socket,一旦读到0,断开连接,read返回负,检查一下errno,如果不是AGAIN,就断开连接。转载https://dengqsintyt.iteye.com/blog/2086485

TIME_WAIT和CLOSE_WAIT的区别相关推荐

  1. TIME_WAIT和CLOSE_WAIT状态区别

    在服务器的日常维护过程中,会经常用到下面的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 它会显示例如 ...

  2. java项目close wait_服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

    昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态. 在服务器的日常维护过程中,会经 ...

  3. 再谈应用环境下的TIME_WAIT和CLOSE_WAIT

    昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有 ...

  4. 应用环境下的TIME_WAIT和CLOSE_WAIT

    转载自:http://blog.csdn.net/shootyou/article/details/6622226 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http ...

  5. TCP连接(Time_Wait、Close_Wait)说明

    修改Time_Wait和CLOSE_WAIT时间 修改Time_Wait参数的方法 (在服务端修改) Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControl ...

  6. linux环境下的TIME_WAIT和CLOSE_WAIT问题解决方法

    再谈应用环境下的TIME_WAIT和CLOSE_WAIT 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/art ...

  7. Linux/Centos: 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案

    问题背景 统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in ...

  8. 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案

    系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) ...

  9. 服务器大量TIME_WAIT和CLOSE_WAIT的原因及解决办法

    原文:https://www.cnblogs.com/whx7762/p/9413787.html 今天登陆服务器想查看一个端口的占用情况,发现好多TIME_WAIT的情况,吓我一跳. 如下是TCP ...

最新文章

  1. 【全网之最】全网最短代码——给名字、电话、账号、昵称加星号*添加隐私保护、身份证号加密、信息脱敏
  2. python的turtle绘图体系入门必看(二)
  3. OSPF分解试验部分-LAB3:OSPF各种网络类型试验
  4. 《研磨设计模式》chap23 职责链模式chainOfResponsibility(1)模式简介
  5. CH - 6802 車的放置(二分图最大匹配)
  6. 关于webservice(CXF)的一些理解
  7. Spring框架学习笔记05:Spring AOP基础
  8. 开源 免费 java CMS - FreeCMS1.3-信息管理
  9. win7虚拟机_VMware8虚拟机安装教程
  10. 【SpringMVC】——图解执行流程
  11. 学习方法——哈佛大学幸福课(积极心理学)学习笔记(下)
  12. 数据库并发控制、悲观锁(Pessimistic Lock)、乐观锁(Optimistic Lock)、排他锁(Exclusivelocks X锁)、共享锁(Shared Lock S锁)
  13. 计算机考研与就业的利弊分析,考研和就业怎么选择 考研和就业的利弊分析
  14. 【Hexo】Hexo搭建Butterfly主题并快速美化
  15. Non-Negative Matrix Factorization 非负矩阵分解(NMF)
  16. JeecgBoot 2.4.6 版本发布,基于代码生成器的企业级低代码平台
  17. 定义一个类,并且在测试类中使用
  18. MDK自动生成版本号
  19. 考公历程 #1 学习笔记
  20. vue2+elTree 实现右键菜单

热门文章

  1. 2017苹果开发者大会看点汇总
  2. JS类教程 Lynda中文
  3. [512大地震]今日图说:四川汶川地震涌现出的16个最牛
  4. 直播api接口java_基于JAVA的电视台直播节目时间表api调用代码实例
  5. window10下安装Elasticsearch(es)和IK分词器
  6. 国庆,几家欢喜几家愁
  7. java虚拟机学习笔记1
  8. 电 脑 小 知 识 荟萃
  9. 考研英语核心词汇梳理一
  10. css 定位连线_前端css实现两点连线