服务器出现大量 TIME_WAIT,如何解决

经常在服务器发现一些连接出现 TIME_WAIT 状态,那么为什么会有 TIME_WAIT状态,它是如何产生的?大量的 TIME_WAIT 有什么危害?如何排查?如何优化?带着这些问题逐步分析:

1. TCP 连接回顾

TCP 创建连接(三次握手)

① 客户端发送连接请求 SYN 报文。

② 服务端接受连接后回复 ACK 报文,并为这次连接分配资源。

③ 客户端收到 ACK 报文后,向服务端发送 ACK 报文,分配资源,TCP 连接建立。

(图片来源于网络)

TCP 关闭连接(四次挥手)

① 客户端发送一个 FIN,关闭客户端到服务端的数据传送,客户端进入 FIN_WAIT_1 状态。

② 服务端收到 FIN 后,发送一个 ACK 给客户端,服务端进入 CLOSE_WAIT 状态。

③ 服务端发送一个 FIN,关闭服务端到客户端的数据传送,服务端进入 LAST_ACK 状态。

④ 客户端收到 FIN 后进入 TIME_WAIT 状态,发送 ACK 给服务端,服务端进入CLOSED 状态,至此完成四次握手。

(图片来源于网络)

注意:TCP 连接的任一方均可以调用 close() 以发起主动关闭。上面的 TCP 建立/释放连接的过程,忽略了各种原因引起的重传、拥塞控制等协议细节。

根据上边的分析,TIME_WAIT 状态出现在 TCP 四次挥手中主动关闭连接方发送完最后一次挥手(ACK 的信号结束后),主动关闭连接方所处的状态。

2. 为什么有 TIME_WAIT

① 可以保证可靠地终止 TCP 连接,如果处于 TIME_WAIT 的客户端发送给服务器确认报文段丢失的话,服务器将重新发送 FIN 报文段,所以客户端必须处于一个可接收的状态 TIME_WAIT 而不是 CLOSED 状态。

② 可以保证迟来的 TCP 报文段有足够的时间被识别并丢弃,某些情况,TCP 报文可能会延迟到达,为了避免迟到的 TCP 报文被误认为是新 TCP 连接的数据,需要在允许新创建 TCP 连接之前,保持一个不可用的状态,等待所有延迟报文的处理。

3. 如何确定 TIME_WAIT 时间

TIME_WAIT 通常也被称为 2MSL 等待状态,当切换到 TIME_WAIT 状态的 socket 会保持 2 倍的最大段生命周期(MSL)的延迟时间。

MSL(Maximum Segment Lifetime)是 TCP 协议数据报中任意一段数据在网络上被丢弃之前保持可用的最大时间,不同的实现为 MSL 设置了不同的值。

为什么是 2MSL 的时长呢?相当于至少允许报文丢失一次。比如,若 ACK 在一个 MSL 内丢失,这样被动方重发的 FIN 会在第 2 个 MSL 内到达,TIME_WAIT 状态的连接可以应对。

4. 如何调整 TIME_WAIT 时间

① Windows 可以修改注册表修改 TIME_WAIT 的值,(注册表项,TcpTimedWaitDelay)。

② 在 Linux 默认的 TIME_WAIT 时长一般是 60 秒,定义在内核的 include/net/tcp.h 文件中,如果想修改,需要修改内核宏定义重新编译。

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT* state, about 60 seconds */
#define TCP_FIN_TIMEOUT   TCP_TIMEWAIT_LEN/* BSD style FIN_WAIT2 deadlock breaker.* It used to be 3min, new value is 60sec,* to combine FIN-WAIT-2 timeout with* TIME-WAIT timer.*/

HZ 是用来定义每一秒有几次 timer interrupts,HZ 可在编译核心时设定。

注意:/proc/sys/net/ipv4/tcp_fin_timeout 并不是 TIME_WAIT 时间,而是 Fin-WAIT-2 状态超时时间。TIME_WAIT 和 FIN_WAIT2 状态的最大时长都是 2 MSL,由于在 Linux,MSL 的值固定为 30 秒,所以都是 60 秒。

5. TIME_WAIT 有什么影响

前面介绍过 TIME_WAIT 状态的必要性,但毕竟会消耗系统资源,产生影响。

① 客户端受端口资源限制:如果客户端 TIME_WAIT 过多,就会导致端口资源被占用,因为端口就 65536 个,被占满就会导致无法创建新的连接。

② 服务端受系统资源限制:理论上服务端可以建立很多连接,虽然只需监听一个端口但会把连接扔给处理线程,所以当服务端出现大量 TIME_WAIT 时,系统资源被占满时,会导致处理不过来新的连接。

6.  如何排查 TIME_WAIT

① 查看状态为 TIME_WAIT 的 TCP 连接

 

netstat -tan |grep TIME_WAIT

② 统计 TCP 各种状态的连接数

 

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

7.  常见 TIME_WAIT 出现场景

例如, 在 HTTP/1.0 协议中默认使用短连接。浏览器每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成以后立即断开 TCP 连接。

例如,如果 HTTP 请求中,connection 被设置成 close,那就相当于通知 Server 执行完请求后去主动关闭连接。

8.  如何优化  

 调整短链接为长链接

长连接比短连接从根本上减少了关闭连接的次数和 TIME_WAIT 的数量,在高并发的系统中优化效果明显。当使用 nginx 作为反向代理时,为了支持长连接,需要注意:

① 从 Client 到 nginx 的连接是长连接,默认 nginx 已经开启了对 Client 连接的 keepalive 支持,调整相关参数:

http {keepalive_timeout 120s;    # 客户端连接的超时时间。为 0 的时候禁用长连接。keepalive_requests 10000;  # 在一个长连接上的最大请求数。}

② 从 nginx 到 Server 的连接是长连接:配置与上游服务器的长连接需要在 upstream 模块中配置 keepalive

http {
upstream backend{server 10.10.0.1:8080 weight=1;server 10.10.0.2:8080 weight=1;keepalive 300; #关键配置}   server {
...
location / {proxy_pass http://backend;proxy_http_version 1.1;         #设置 HTTP 版本为 1.1proxy_set_header Connection ""; #设置 Connection 为长连接(默认为no)}}
}

 调整服务器内核参数

① Linux 提供了 tcp_max_tw_buckets 参数,当 TIME_WAIT 的连接数量超过该参数时,新关闭的连接就不再经历 TIME_WAIT 而直接关闭:

[root@kvm-10-115-88-47 ~]# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
32768

② 另外 Linux  提供了 tcp_tw_reuse 参数,允许将 TIME_WAIT  sockets 重新用于新的 TCP 连接,复用连接。但需要注意,该参数是只用于客户端(建立连接的发起方)。

net.ipv4.tcp_timestamps = 1net.ipv4.tcp_tw_reuse = 1

③ Linux 4.12 之前还提供了 tcp_tw_recycle 参数,表示开启TCP连接中TIME-WAIT sockets的快速回收。

注意,当开启了它,比如使用了 NAT,LVS 时,没法保证时间戳单调递增的,会出现部分数据包被服务端拒绝的情况。该参数在内核 4.12 之后被移除,生产环境不建议开启。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68591.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】vagrant up下载box速度太慢的解决方法

文章目录 有自己思想,拒绝纯复制黏贴!!! 有自己思想,拒绝纯复制黏贴!!! 有自己思想,拒绝纯复制黏贴!!! 一、问题背景二、处…

我用Python爬虫获取数据,分析双色球中奖概率,差点就中了

很多人喜欢买彩票,但是经常买彩票的人要么想着一夜暴富,要么想着改变命运,要么是娱乐娱乐,但是小编也要提醒大家一句,哪里能赚钱,哪里就有奸商,做事须谨慎。 前两天,在网上看到一个有意思的问题:彩票预测靠谱么?为什么还有那么多的人相信彩票预测? 暂且不说,彩票预…

学历、长相、家境普通的人,未来的发展方向是什么?00后的职业规划都已经整得明明白白

前言 “少壮不努力,老大徒伤悲” 相信你跟我有着类似的经历,年少时不知学习的重要性,没有好好念书,不由己的选择了一所不是理想的大学,然后选择了一个自己并不是很了解的专业。这里也不是说曾经的不好,而…

树莓派微型web服务器——阶段设计报告

文章目录 1. 需求分析1.1 功能需求1.1.1 访问需求1.1.2 自定义域名需求1.1.3 下载公共文件需求1.1.4 用户体验需求 1.2 技术需求1.2.1 操作系统指令1.2.2 技术栈1.2.3 内网穿透 1.3 性能需求1.3.1 处理能力1.3.2 内存1.3.3 存储空间 2. 可行性分析2.1 硬件方面2.2 软件方面 3. …

视觉分割大模型的过去、现在和未来!SAM最新综述来了!

点击下方卡片,关注“自动驾驶之心”公众号 ADAS巨卷干货,即可获取 今天自动驾驶之心很荣幸邀请到Garfield来分享视觉SAM分割大模型的最新综述,如果您有相关工作需要分享,请在文末联系我们! >>点击进入→自动驾驶…

Transformer越新里程碑!破10万!

仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:新智元 2017年,谷歌团队在论文「Attention Is All You Need」提出了开创性的NLP架构Transformer,自此一路开挂。 多年来,这一架构风靡微软、谷歌、Me…

Transformers GitHub项目星标突破10万!新里程碑!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【Transformer】微信技术交流群 转载自:新智元 | 编辑:桃子 【导读】问世6年来,Transformer不仅成为NLP领域的主流模型,甚至成…

星标破10万!Auto-GPT之后,Transformers越新里程碑

【导读】问世6年来,Transformer不仅成为NLP领域的主流模型,甚至成功向其他领域跨界,一度成为风靡AI界的机器学习架构。恰在今天,Transformer在GitHub上星标破10万大关! 2017年,谷歌团队在论文「Attention…

逼人去学挖掘机:朱俊彦团队新AI模型发布,设计圈看了心慌慌

明敏 发自 凹非寺量子位 | 公众号 QbitAI CV大佬朱俊彦的新论文,让设计师们感觉危了。 事情是这样的: 量子位在微博上搬运了朱俊彦团队的新成果,一个能将2D草图一键变成3D模型的新算法,却意外引发设计圈盆友们的热烈转发讨论。 配…

奇特!AI换脸让康熙本人出演电视剧;LLM超全综述资料;业内深聊游戏行业中AI应用实践;吴恩达联合Hugging Face再出新课 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 B站UP主再出「邪招」,让康熙本人出演电视剧名场面 B站UP主 PAC_松柏 结合康熙画像和电视剧画面,对视频人物角色…

星标破10万!Auto-GPT之后,Transformer越新里程碑

来源丨新智元 编辑丨桃子 【导读】问世6年来,Transformer不仅成为NLP领域的主流模型,甚至成功向其他领域跨界,一度成为风靡AI界的机器学习架构。恰在今天,Transformers库在GitHub上星标破10万大关! 2017年,…

cuda各个版本的Pytorch下载网页版,还有各个链接

cuda各个安装包下载 https://developer.nvidia.com/cuda-toolkit-archive cuda对应的cudnn安装包 https://developer.nvidia.com/rdp/cudnn-archive cuda对应的pytorch版本包 https://download.pytorch.org/whl/torch_stable.html ChatGPT https://chatgpt.qdymys.cn/#/c…

2019年房价调整是大概率事件,如果房价下跌,会出现什么问题?

这里我们将没有房贷的人分为三种:一种是暂时没有能力买房但存款可观的人,一种是手上有房没有房贷的人,还有一种是既没房,没房贷,还没钱的人。 首先,房价大跌,对于房地产行业的影响是十分严重的&…

基础图表解读“东方甄选”爆火出圈数据

数据可视化越来越广泛,数据图表也越来越绚丽多彩,不管多高级多有趣的图表,都不及基础图表在图表界的地位,要说图表使用率,基础图表才是“永远的神”。接下来跟随平台用基础折线图、柱状图、面积图,来了解最…

芯片算力(TOPS, GOPS, MOPS)与精度(int8,int16)

芯片算力是描述处理器进行运算,对数据进行操作的能力的指标。字面上理解,芯片算力越大,每秒能够进行的运算次数就越多,执行计算任务就越快。 算力的基本单位有: TOPS:Tera Operations Per Second&#xf…

十问华为鸿蒙操作系统:跟安卓有何差异,其他终端厂商怎么看

点击上方“民工哥技术之路”选择“置顶或星标” 每天10点为你分享不一样的干货 原文链接如下: https://www.toutiao.com/a6726653150180164107/ 鸿蒙”初开,万众瞩目。这款华为开发的操作系统,到底有何特别之处? 8月9日&#xff0…

RT-Thread团队回应社区关切:鸿蒙OS带来的影响-合作远远大于竞争

关于HarmonyOS 2019年8月9日,华为正式向全球发布了全新的自有系统 HarmonyOS 1.0——基于微内核的面向全场景的分布式操作系统,并宣布开源;2020年9月10日,华为发布HarmonyOS 2.0,并正式开源代码。据当前开源的代码&am…

100个让ChatGPT更听话的技巧之1:提出更具体的问题

你好,我是赤辰。 ChatGPT并没有万能公式,但有许多能让它回答得更高效的技巧,接下来我们每天会介绍1条让ChatGPT更听话的技巧; 下面介绍100个能让ChatGPT更听话的技巧的第1个:提供更具体的问题或指令,而非…

100个让ChatGPT更听话的技巧之:提出更具体的问题

你好,我是赤辰。ChatGPT并没有万能公式,但有许多能让它回答得更高效的技巧,接下来我们每天会介绍1条让ChatGPT更听话的技巧;下面介绍100个能让ChatGPT更听话的技巧的第1个:提供更具体的问题或指令,而非模糊…

ChatGPT指令「万能公式」,学会这一个就是高手了

ChatGPT指令「万能公式」,学会这一个,你也可以是高手了 这个【万能公式】ChatGPT自己总结出来的,ChatGPT提问万能公式,套用这个公式,ChatGPT给出的答案都不会差! 直接入主题: 指令万能公式 角…