[转帖]关于线上环境CLOSE_WAIT和TIME_WAIT过高

关于,环境,close,wait,time · 浏览次数 : 0

小编点评

**TIME_WAIT** TIME_WAIT状态是因为服务端主动关闭造成的,在服务端发送了最后一个FIN包后,系统会等待 Double时间的MSL(Max Segment Lifetime)用于等待接受客户端发送过来的FIN_ACK和FIN,这段时间服务端的对应的socket的fd是不能够重新利用的,这样在大量的短连接服务中,会出现TIME_WAIT过多的现象。 **CLOSE_WAIT** CLOSE_WAIT状态是因为客户端主动关闭,收到FIN包,应用层却没有做出关闭操作引起的。CLOSE_WAIT在Nginx上面的产生原因还是因为Nagle's算法加Nginx本身EPOLL的ET触发模式导致。ET出发模式在数据就绪的时候会触发一次回调操作,Nagle's算法会累积TCP包,如果最后的数据包和FIN包被Nagle's算法合并,会导致EPOLL的ET模式只出发一次,然而在应用层的SOCKET是读取返回0才代表链接关闭,而读取这次合并的数据包时是不返回0的,然后SOCKET以后都不会触发事件,所以导致应用层没有关闭SOCKET,从而产生大量的CLOSE_WAIT状态链接。

正文

https://www.cnblogs.com/Bozh/p/3752476.html

 

运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态

先从原因分析一下为什么,问题就迎刃而解了。

 

首先是TIME_WAIT:

  理解一下TIME_WAIT状态产生的原因,这个问题已经被很多很多的书说烂了,但是为什么很多人还是不能解决,究其原因还是因为

大多数都是学术派,并没有真正的遇到过这样的问题,因为TIME_WAIT大量产生很多都发生在实际应用环境中。

TIME_WAIT产生的原因还是因为在通讯过程中服务端主动关闭造成的,在服务端发送了最后一个FIN包后,系统会等待 Double时间

的MSL(Max Segment Lifetime)用于等待接受客户端发送过来的FIN_ACK和FIN,这段时间服务端的对应的socket的fd是不能够重新

利用的,这样在大量的短连接服务中,会出现TIME_WAIT过多的现象。

解决方案:

  调整TIME_WAIT超时时间

  

1
vi /etc/sysctl.conf

  

1
2
3
4
5
6
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
 
 
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
 
net.ipv4.tcp_fin_timeout = 20

 

其次是CLOSE_WAIT:

  CLOSE_WAIT产生的原因是客户端主动关闭,收到FIN包,应用层却没有做出关闭操作引起的。

CLOSE_WAIT在Nginx上面的产生原因还是因为Nagle's算法加Nginx本身EPOLL的ET触发模式导致。

ET出发模式在数据就绪的时候会触发一次回调操作,Nagle's算法会累积TCP包,如果最后的数据包和

FIN包被Nagle's算法合并,会导致EPOLL的ET模式只出发一次,然而在应用层的SOCKET是读取返回

0才代表链接关闭,而读取这次合并的数据包时是不返回0的,然后SOCKET以后都不会触发事件,所以

导致应用层没有关闭SOCKET,从而产生大量的CLOSE_WAIT状态链接。

  关闭TCP_NODELAY,在Nginx配置中加上

  tcp_nodelay        on;

 

文章属原创,转载请注明出处 联系作者: Email:zhangbolinux@sina.com QQ:513364476

与[转帖]关于线上环境CLOSE_WAIT和TIME_WAIT过高相似的内容:

[转帖]关于线上环境CLOSE_WAIT和TIME_WAIT过高

https://www.cnblogs.com/Bozh/p/3752476.html 运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了。 首先是TIME_WAIT: 理解一

[转帖]关于 AREX

https://arextest.github.io/website/zh-Hans/docs/intro/ AREX 介绍​ 背景​ 对于一个初上线的简单服务,只需通过常规的自动化测试加上人工即可解决,但我们线上核心的业务系统往往比较复杂,通常也会频繁的需求迭代,如何保证被修改后的系统原有业务的正

[转帖]clickHouse单机模式安装部署(RPM安装)

关于版本和系统的选择 操作系统:Centos-7 ClickHouse: rpm 在安装,20.x 安装前的准备 CentOS7 打开文件数限 在 /etc/security/limits.conf 这个文件的末尾加入一下内容: [hadoop@hadoop001 ~]$ sudo vim /etc

[转帖]关于网卡特性TSO、UFO、GSO、LRO、GRO

2022-12-23 我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。 TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,也有人叫 LSO (Large segment offload) ,TSO是针对TCP的,UF

【转帖】关于网卡特性TSO、UFO、GSO、LRO、GRO

https://www.cnblogs.com/larrypeng/p/12496810.html 我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。 TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,也有人叫 LSO

[转帖]【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列

【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列 作者:冰河 2022-11-04 四川 本文字数:13519 字 阅读完需:约 44 分钟 写在前面 最近,一直有小伙伴让我整理下关于 JVM 的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。 JDK 是

[转帖]关于linux:NUMA架构下的内存延迟区别测试

https://lequ7.com/guan-yu-linuxnuma-jia-gou-xia-de-nei-cun-yan-chi-qu-bie-ce-shi.html 当初的服务器物理机CPU个别都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多的内存条组成的。那么我这

[转帖]关于TIME_WAIT优化

我们先看一下四次挥手过程 # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # netstat -tan | awk '{print $6}' | sort | uniq -c 通过此图先说明几个概念: TI

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]关于第四代Intel Xeon Scalable的一些技术思考

https://zhuanlan.zhihu.com/p/598702329 前两天,代号Sapphire Rapids的第四代Intel Xeon Scalable处理器正式发布了,本文算是我的一点技术思考吧,顺便和大家交流下。由于我水平和手头资料都有限,目前还只能是旁观的视角,如有任何错误不足欢