当前位置: 首页 > news >正文

为什么服务端会有那么多的 TimeWait ?

工作中无论是开发环境还是线上环境,我们都出现过大量的 timewait 状态的连接,例如下面这个例子

服务端简单的开辟一个 web server 监听 9966 端口

客户端进行疯狂的请求服务端

瞬间就可以看到咱们服务端的出现大量的 TIME_WAIT 状态的连接

这个时候,如果客户端再不停的请求服务端的话,我们就可以看到会出现这样的一个错误 address already in use : connect

这个时候是表示咱们已经没有可以使用的端口, 地址都在被使用中

那我们来看一下为什么会出现上述这种情况,以及我们如何去解决他呢?

为什么会出现这么多的 TIME_WAIT 状态

上面其实咱们也看到了,出现大量 TIME_WAIT 状态,一般是出现在高并发场景,同时有多个请求进来, 如果基本都是短连接,那么服务端处理完毕请求之后就会关闭连接,那么服务端就会出现大量的 TIME_WAIT 状态的连接,需要等待 2 MSL 的报文最大存活时间,才会被系统释放回收,回收哦,又空余出连接数,来进行服务

简单的咱们可以使用如下命令来查看我们的 TIME_WAIT 状态的连接数

netstat -antp|grep TIME_WAIT |wc -l 

上述这种情况,在并发的时候,我们的某些请求可能没有办法得到处理,这是为什么呢?

有一点网络基本知识的我们知道,咱们的 TCP 结构是这样的:

对于目的端口和源端口,在 tcp 包头上都是占用 16 bit ,那么就是分别 65535 个端口,此处客户端请求服务端,那么源端口最多也就是 65535 个连接

而当我们请求服务端时,报错地址正在被使用,咱们就需要等待最大 2MSL 的时间,才能正常连接服务端了

我们如何处理 TIME_WAIT 大量存在的情况

我们如何处理 TIME_WAIT 大量存在的情况呢?前提是我们先知道这个 TIME_WAIT 是产生在哪一边的,一般情况下多数是发生在服务端

对于 TCP 的三次握手和四次挥手就不在此处做详细阐述了,对于基本 TCP 原理中,客户端和服务端,哪一端先发起关闭连接,那么 TIME_WAIT 就会出现在哪一端,例如下面这个简图:

那么,我们可以知道上述例子,TIME_WAIT 是出现在服务端的,这是为什么呢?

因此客户端的请求连接头部中 connection 设置的一般是 close 字段,此时服务端的处理是一个短连接,服务端处理完毕之后,就会主动关闭连接

TIME_WAIT 含义是,我这边主动关闭连接, 我不会主动发送信息给你了,但是你发送的信息,我是可以正常接收的

其实咱们一般是可以这样来解决上述大量 TIME_WAIT 存在的情况的

咱们简单思考一下,解决这个问题,要么是不产生这么多 TIME_WAIT 状态的连接,要么就是这个 TIME_WAIT 状态的连接能够更快的被释放掉,好空出闲置的端口来进行使用

对于这个思路的第一点:

客户端请求服务端的时候,头部的 connection 设置为 keep-alive,和服务端保持长连接的特性,保持存活一段时间

那么,对于思路的第二点:

那么是长连接,也是会有断开的时候,那么,如果是服务端这边主动断开的话,仍然会在服务端上出现 TIME_WAIT,我们是否可以考虑能够将这个TIME_WAIT 的时间缩短一点,就是去对 2MSL 做文章了

这个时间,可以根据咱们自身的设计来调整成 例如 1MSL 也是可以的,这并不完全是死的

注意哦:一般 1 个 MSL 是 120 秒,也就是 2 分钟

今天就是这样,下一次分享一波为什么需要 TIME_WAIT 状态

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI

相关文章:

为什么服务端会有那么多的 TimeWait ?

工作中无论是开发环境还是线上环境,我们都出现过大量的 timewait 状态的连接,例如下面这个例子 服务端简单的开辟一个 web server 监听 9966 端口 客户端进行疯狂的请求服务端 瞬间就可以看到咱们服务端的出现大量的 TIME_WAIT 状态的连接 这个时候&…...

任意文件读取及漏洞复现

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…...

目前的一些关于机器学习的感悟

目前的一些关于机器学习的想法 大家一直都在说深度学习和积极学习,当我在本科的时候,就听到很多关于这方面的东西,但当时自己对于这些东西的概念较为模糊,随着研究生进一步的学习,我想讲一下,到目前我所理…...

salesforce从sandbox部署到生产环境的自定义字段权限没有成功上载

salesforce从sandbox部署到生产环境的自定义字段权限没有成功上载 只将字段名称和类型上载了。 查阅: https://help.salesforce.com/s/articleView?idsf.deploy_special_behavior.htm&type5 显示: 自定义字段 从 API 版本 30.0 开始,…...

字节跳动推出AI对话工具“豆包”:免费用

我是卢松松,点点上面的头像,欢迎关注我哦! 听说松松客服的小马爆料了一个消息:字节跳动推出了一个新的AI大模型对话工具,叫做“豆包”。竟然一查发现,早在8月18号就已经上线了呢。原来这个“豆包”其实是之…...

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测…...

代码随想录训练营二刷第十五天 | 层序遍历10道 226.翻转二叉树 101.对称二叉树 2

代码随想录训练营二刷第十五天 | 层序遍历10道 226.翻转二叉树 101.对称二叉树 2 一、102. 二叉树的层序遍历 题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/ 思路:两次while,内层控制每一行的数量&#xff0c…...

nowcoder NC10 大数乘法

题目链接: https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571?tpId196&tqId37177&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficultyundefined&judgeStatusundefined&tags&tit…...

非科班菜鸡算法学习记录 | 代码随想录算法训练营第58天|| 单调栈! 739. 每日温度 496.下一个更大元素 I

739. 每日温度 输入一个数组&#xff0c;找比i天温度高的第一天 知识点&#xff1a;单调栈 状态&#xff1a;看思路自己写 思路&#xff1a; 看自己写的注释&#xff0c;维护一个单调栈 // 版本一 class Solution { public:vector<int> dailyTemperatures(vector<…...

【Luogu】 P5445 [APIO2019] 路灯

题目链接 点击打开链接 题目解法 转化很妙 考虑关路灯 x x x 的操作 令左边第一个未关的路灯为 L L L&#xff0c;右边第一个未关的路灯为 R R R&#xff0c;那么这一次会影响的区间即为 l ∈ [ L 1 , x ] , r ∈ [ x , R − 1 ] l\in[L1,x],\;r\in[x,R-1] l∈[L1,x],…...

Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)

目录 一、独立消费者消费某一个主题中某个分区数据案例1.1、案例需求1.2、案例代码1.3、测试 一、独立消费者消费某一个主题中某个分区数据案例 1.1、案例需求 创建一个独立消费者&#xff0c;消费firstTopic主题 0 号分区的数据&#xff0c;所下图所示&#xff1a; 1.2、案…...

基于Simulink的用于电力系统动态分析

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

日200亿次调用,喜马拉雅网关的架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《API网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/微博/…...

构造函数和析构函数(个人学习笔记黑马学习)

构造函数:主要作用在于创建对象时为对象的成员属性赋值&#xff0c;构造函数由编译器自动调用&#xff0c;无须手动调用。析构函数:主要作用在于对象销毁前系统自动调用&#xff0c;执行一些清理工作。 #include <iostream> using namespace std;//对象初始化和清理class…...

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程

详情点击链接&#xff1a;GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程 前沿 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。 如在科研编程、绘图领域&#xff1a; 1、编程建议和示例代码: 无论你使用的编程语言是…...

Git上传新项目

第一步&#xff1a;初始化 Git 仓库 首先&#xff0c;打开终端或命令行界面&#xff0c;然后导航到项目目录。运行下面的命令来初始化一个新的 Git 仓库&#xff1a; git init这将创建一个新的 .git 子目录&#xff0c;其中包含了初始化的 Git 仓库。 第二步&#xff1a;添加…...

C语言文件操作总结

目录 字符方式读入文件 数据块方式读写文件 文件定位与随机读写 文件中数据的修改 字符方式读入文件 1.向文件中写入&#xff08;输入字符&#xff09; 用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。 int fputc(int ch,FILE * fp) ch 是要输出的字符&#…...

原生js之dom如何进行事件监听(事件捕获/冒泡)

那么好,这次主要讲解的就是dom是如何进行事件监听和事件取消监听的,我们知道vue中主要用watch来进行监听. js监听与取消监听 那么原生js主要用到的就是addListenEvent事件来进行监听,可以监听文档dom对象也可以监听浏览器bom对象,监听事件的语法结构如下 Dom/Bom监听 eleme…...

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

BUUCTF-WEB-[ACTF2020 新生赛]Includel

打开靶机 点击tips 利用Burp抓包&#xff0c;未见异常 但发现了响应头是 PHP/7.3.13 想到了"php://input"伪协议POST发送PHP代码 构建Payload&#xff1a;?filephp://filter/readconvert.base64-encode/resourceflag.php 这里需要注意的是使用php://filter伪协议…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...