怎么减少tcp 的time_wait时间
减少 TCP 连接的 TIME_WAIT
状态时间是运维中常见的优化问题,尤其是在高并发和大量短连接的场景下,过多的 TIME_WAIT
会占用系统资源,影响系统性能。下面是一些常见的优化方法和措施。
🔹 1. 修改 TCP 参数
✅ 调整 tcp_fin_timeout
(Linux 中的 TIME_WAIT
超时时间)
TIME_WAIT
状态是 TCP 连接关闭时为了确保数据完整性而保持的一段时间,默认情况下在 Linux 系统中,TIME_WAIT
状态保持 60 秒。如果你希望减少 TIME_WAIT
的时间,可以通过修改以下参数来优化:
-
查看当前的
tcp_fin_timeout
值sysctl net.ipv4.tcp_fin_timeout
-
调整
tcp_fin_timeout
-
修改
tcp_fin_timeout
值,减少TIME_WAIT
的持续时间,通常可以设置为 30 秒或更小:
sysctl -w net.ipv4.tcp_fin_timeout=30
注意:将
tcp_fin_timeout
设置得过低可能会影响连接的稳定性,因此需要根据实际情况选择合适的时间。 -
-
永久设置(修改 sysctl 配置) 编辑
/etc/sysctl.conf
文件,加入以下配置以使设置永久生效:net.ipv4.tcp_fin_timeout=30
然后运行:
sysctl -p
🔹 2. 使用 SO_REUSEADDR
和 SO_REUSEPORT
SO_REUSEADDR
和 SO_REUSEPORT
是两个非常有用的 TCP socket 选项,它们允许程序重用本地地址和端口,这样可以减少 TIME_WAIT
状态的数量。
✅ 具体做法
-
SO_REUSEADDR
:允许在TIME_WAIT
状态的端口上重用连接。通常,web 服务器(如 Nginx、Apache) 可以使用这个选项来优化端口的重用。 -
SO_REUSEPORT
:多个进程可以绑定到同一个端口,适用于多进程服务的高并发优化。
在代码中设置(以 Python 为例):
import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('0.0.0.0', 8080))
🔹 3. 调整内核参数 tcp_max_orphans
和 tcp_max_syn_backlog
Linux 内核参数 tcp_max_orphans
和 tcp_max_syn_backlog
可以限制半连接和孤立连接的数量,它们间接影响到 TIME_WAIT
状态。
-
tcp_max_orphans
:定义系统中处于ORPHANED
状态的 TCP 套接字最大数量(即尚未处理的连接)。 -
tcp_max_syn_backlog
:定义连接请求队列的最大长度(通常在 TCP 握手时使用)。
调整方法:
bash
复制编辑
sysctl -w net.ipv4.tcp_max_orphans=32768 sysctl -w net.ipv4.tcp_max_syn_backlog=2048
通过调整这些参数可以在高负载环境下减少由于未处理连接导致的 TIME_WAIT
状态堆积。
🔹 4. 调整 tcp_tw_reuse
和 tcp_tw_recycle
Linux 系统允许你启用 tcp_tw_reuse
和 tcp_tw_recycle
来重新使用 TIME_WAIT
状态的连接,从而减少不必要的资源消耗。
-
tcp_tw_reuse
:允许重用TIME_WAIT
状态的连接,用于客户端连接的快速关闭和重用。 -
tcp_tw_recycle
:启用后可以更快速地回收TIME_WAIT
连接(但是这可能对 NAT 环境中的连接产生负面影响,因此要谨慎使用)。
启用方法:
-
启用
tcp_tw_reuse
和tcp_tw_recycle
bash
复制编辑
sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_tw_recycle=1
-
永久设置: 修改
/etc/sysctl.conf
文件,加入以下配置:bash
复制编辑
net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_tw_recycle=1
-
重载配置:
bash
复制编辑
sysctl -p
注意:tcp_tw_recycle
在使用 NAT 的环境中可能会导致一些问题,因此在生产环境中使用时需要谨慎。
🔹 5. 增加系统文件句柄数
TIME_WAIT
状态的连接会占用系统的文件句柄,如果文件句柄不够,可能会导致新的连接无法创建。因此,增加文件句柄数限制是减少 TIME_WAIT
状态积累的一个间接方法。
增加文件句柄限制:
-
查看当前文件句柄限制:
bash
复制编辑
ulimit -n
-
修改
/etc/security/limits.conf
文件,增加对当前用户的文件句柄限制:bash
复制编辑
user_name soft nofile 65536 user_name hard nofile 65536
-
修改
/etc/sysctl.conf
中的文件句柄限制:bash
复制编辑
fs.file-max = 2097152
🔹 6. 关闭不必要的连接
在高负载环境中,如果连接频繁且短暂,TIME_WAIT
状态可能会占用大量资源。可以通过优化应用逻辑来减少无效连接:
-
保持连接池:避免每次请求都创建新的连接,尤其是数据库和后端服务。
-
长连接:对于 HTTP/HTTPS 服务,使用持久连接(HTTP Keep-Alive)。
-
优雅关闭连接:确保服务端在关闭连接时不会频繁进入
TIME_WAIT
状态。
🔹 总结:
减少 TIME_WAIT
时间可以通过以下几种方式:
-
调整 TCP 内核参数(如
tcp_fin_timeout
,tcp_tw_reuse
)。 -
使用
SO_REUSEADDR
和SO_REUSEPORT
。 -
合理配置系统的最大文件句柄数。
-
优化应用层逻辑,减少不必要的连接创建。
不同优化方法的适用场景不同,在实际生产环境中应根据业务需求和系统架构谨慎选择。你可以根据实际情况决定是否使用这些方法。如果你有特定环境,欢迎进一步探讨!
相关文章:
怎么减少tcp 的time_wait时间
减少 TCP 连接的 TIME_WAIT 状态时间是运维中常见的优化问题,尤其是在高并发和大量短连接的场景下,过多的 TIME_WAIT 会占用系统资源,影响系统性能。下面是一些常见的优化方法和措施。 🔹 1. 修改 TCP 参数 ✅ 调整 tcp_fin_time…...
RK3568平台开发系列讲解(调试篇)debugfs API接口及案例
更多内容可以加入Linux系统知识库套餐(教程+视频+答疑) 🚀返回专栏总目录 文章目录 一、Debugfs API1.1、创建目录和文件1.2、导出数字1.3、绑定一个 size_t 类型的变量1.4、绑定一个 u32 类型的变量1.5、绑定一块二进制数据1.6、绑定到一堆寄存器集合1.7、修改 debugfs…...
文件【Linux操作系统】
文章目录 文件前置知识访问文件之前,为什么文件必须打开?文件的管理 标准流标准错误流的作用是什么? 进程和文件的关系在用户层面文件描述符是访问文件的唯一方式,因为系统调用接口只能通过文件描述符来找到对应的文件 操作文件的…...
PVT曲线:预测高分子材料收缩与翘曲的“热力学密码”
在高分子材料的广阔领域中,PVT 曲线作为一种关键的研究工具,正逐渐展现出其不可忽视的重要性。PVT 曲线,即聚合物材料的压力(Pressure)、体积(Volume)和温度(Temperature)…...
IDEA中Quarkus框架(3.13版本)容器编排、压测与调优、注意事项等
Quarkus框架学习的第一部分,请访问: IDEA中Quarkus框架(3.13版本)开发、调试、部署、打包等 五、docker-compose容器编排 1、创建编排文件 cd quarkus-helloworldvi docker-compose.ymldocker-compose.yml内容如下: # yaml 配置实例 ver…...
vue+django+LSTM微博舆情分析系统 | 深度学习 | 食品安全分析
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: D031 LSTM 架构:vuedjangoLSTMMySQL 功能: 微博信息爬取、情感分析、基于负面消极内容舆情分析…...
CSS初识
CSS能够对⽹⻚中元素位置的排版进⾏像素级精确控制,实现美化⻚⾯的效果.能够做到⻚⾯的样式和结构分离。 可以理解给页面化妆,美化排版。 基本语法规范 选择器{⼀条/N条声明} 选择器决定针对谁修改(找谁) 声明决定修改啥(⼲啥) 声明的属性是键值对,…...
Kafka 主题设计与数据接入机制
一、前言:万物皆流,Kafka 是入口 在构建实时数仓时,Kafka 既是 数据流动的起点,也是后续流处理系统(如 Flink)赖以为生的数据源。 但“消息进来了” ≠ “你就能处理好了”——不合理的 Topic 设计、接入方…...
文件系统常见函数
write系统调用 #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 参数说明 fd 文件描述符,指向已打开的文件或设备(如标准输出 1、文件句柄等 buf 指向待写入数据的缓冲区指针,支持任意数据类型…...
深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解
已记忆集合(RSet)与收集集合(CSet)详解 深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解一、 引言:G1 GC 的基石二、 已记忆集合 (RSet):跟…...
Android Cordova 开发 - Cordova 解读初始化项目(index.html meta、Cordova.js、config.xml)
一、index.html meta 1、Content-Security-Policy (1)基本介绍 <meta http-equiv"Content-Security-Policy" content"default-src self data: https://ssl.gstatic.com unsafe-eval; style-src self unsafe-inline; media-src *; i…...
uv run 都做了什么?
uv run 都做了什么? uv run <命令> [参数...] 的主要作用是:在一个由 uv 管理或发现的 Python 虚拟环境中,执行你指定的 <命令>。它会临时配置一个子进程的环境,使其表现得如同该虚拟环境已经被激活一样。这意味着&am…...
Maven 依赖坐标与BOM统一管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
UV: Python包和项目管理器(从入门到不放弃教程)
目录 UV: Python包和项目管理器(从入门到不放弃教程)1. 为什么用uv,而不是conda或者pip2. 安装uv(Windows)2.1 powershell下载2.2 winget下载2.3 直接下载安装包 3. uv教程3.1 创建虚拟环境 (uv venv) 4. uvx5. 此pip非…...
32单片机——GPIO的工作模式
1、GPIO GPIO(General Purpose Input Output,通用输入输出端口)是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组16个IO口,组数视芯片而定。STM32F103ZET6芯片是144脚的芯片࿰…...
Science Robotics 新型层级化架构实现250个机器人智能组队,“单点故障”系统仍可稳定运行
近期,比利时布鲁塞尔自由大学博士生朱炜煦与所在团队提出了一种创新的机器人群体架构——“自组织神经系统”(SoNS,Self-organizing Nervous System)。 它通过模仿自然界中的生物神经系统的组织原理,为机器人群体建立了…...
【HFP】蓝牙HFP协议来电处理机制解析
目录 一、协议概述与技术背景 1.1 HFP协议演进 1.2 核心角色定义 1.3 关键技术指标 二、来电接入的核心交互流程 2.1 基础流程概述:AG 的 RING 通知机制 2.2 HF 的响应:本地提醒与信令交互 三、带内铃声(In-Band Ring Tone࿰…...
03-谷粒商城笔记
一个插件的install和生命周期的报错是不一样的 Maven找不到ojdbc6和sqljdbc4依赖包 这时候我找到了jar包,然后我就先找到一个jar安装到了本地仓库。 在终端上进行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …...
PHP 反序列化CLI 框架类PHPGGC 生成器TPYiiLaravel 等利用
# 反序列化链项目 -PHPGGC&NotSoSecure -NotSoSecure https://github.com/NotSoSecure/SerializedPayloadGenerator 为了利用反序列化漏洞,需要设置不同的工具,如 YSoSerial(Java) 、 YSoSerial.NET 、 PHPGGC 和它的先决条件。 Deserializati…...
LeetCode热题100——283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出:…...
C++入门小馆: 探寻vector类
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
力扣hot100_链表(3)_python版本
一、25. K 个一组翻转链表 1.1、206. 反转链表 py代码 class ListNode:def __init__(self, val0, next node):self.val valself.next next class Solution:def reverseList(self, head):pre Nonecur headwhile cur:next cur.nextcur.next prepre curcur nextreturn p…...
Lua 第9部分 闭包
在 Lua 语言中,函数是严格遵循词法定界的第一类值。 “第一类值”意味着 Lua 语言中的函数与其他常见类型的值(例如数值和字符串)具有同等权限: 一个程序可以将某个函数保存到变量中(全局变量和局部变量均可&a…...
【Linux】冯诺依曼体系结构及操作系统架构图的具体剖析
目录 一、冯诺依曼体系结构 1、结构图 2、结构图介绍: 3、冯诺依曼体系的数据流动介绍 4、为什么在该体系结构中要存在内存? 二、操作系统架构图介绍 1、操作系统架构图 2、解析操作系统架构图 3、为什么要有操作系统? 前些天发现了一…...
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值 1.1 硬件虚拟化与操作系统级虚拟化 虚拟机(VM)基于硬件级虚拟化技术(Hypervisor),通过模拟完整硬件栈(CPU、内存、存储、网络)创建独…...
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用 什么是队列集? 在FreeRTOS中,队列集(Queue Sets,英文名xQueueSet)是一种强大的数据结构,用于高效管理多个队列。它的…...
java将pdf转换成word
1、jar包准备 在项目中新增lib目录,并将如下两个文件放入lib目录下 aspose-words-15.8.0-jdk16.jar aspose-pdf-22.9.jar 2、pom.xml配置 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><versi…...
网络原理 - 6
目录 4. 滑动窗口 滑动窗口出现丢包 情况一:数据报已经抵达,ACK 被丢了编辑 情况二:数据报直接就丢了 5. 流量控制 完! 4. 滑动窗口 这个滑动窗口是 TCP 中非常有特点的机制。 我们知道,TCP 是通过确认应答&…...
【Linux网络】构建类似XShell功能的TCP服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Spring AI - Redis缓存对话
先看效果 对话过程被缓存到了Redis 中。 原理 在上一节我们快速入门了SpringAI,具体文章请查看:快速入门Spring AI 创建 ChatClient 的代码如下: this.chatClient ChatClient.builder(chatModel).defaultSystem(DEFAULT_PROMPT).defaultAd…...
rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验
4.1 Linux 下 LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动 最终也是对 RK3588 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。开发板上的 LED 连接…...
第49讲:AI驱动的农业碳汇估算与生态价值评估 —— 打造更“绿”的智慧农业未来
目录 🌍 一、农业碳汇:我们为什么要关心它? 🤖 二、AI是如何介入农业碳汇评估的? 🛠 三、案例实战:AI估算区域农田碳汇储量 📍 场景设定: 📊 数据来源: 🔁 处理流程: 📈 四、生态价值评估:从碳储量到生态效益 🧭 五、平台与工具推荐 💬 六、…...
springmvc入门案例
目录 前言 springmvc概述 springmvc入门案例(使用配置类替代原本的web.xml) 第一步、创建一个web工程 第二步、引入相应的依赖(servlet-api、spring-webmvc、) 第三步、编写 SpringMVC配置类,并开启包扫描功能 第四步、编写…...
Node.js学习
概述 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,允许在服务器端运行 JavaScript 代码。它采用事件驱动和非阻塞 I/O 模型,适合构建高性能、可扩展的网络应用,尤其擅长处理实时应用和大规模数据密集型场景 背景 JavaScri…...
SQL注入漏洞中会使用到的函数
目录 一、信息获取函数 1. 通用函数 2. 元数据查询(INFORMATION_SCHEMA) 二、字符串操作函数 1. 字符串连接 2. 字符串截取 3. 编码/解码 三、报错注入专用函数 1. MySQL 2. SQL Server 3. PostgreSQL 四、时间盲注函数 1. 通用延迟 2. 计…...
MIT IDSS深度解析:跨学科融合与系统科学实践
麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。 MIT IDSS 建立在统计学、计算机科学和特定应用领域…...
重塑智慧出行新生态,德赛西威全新战略愿景发布
4月22日,上海车展开幕前夕,德赛西威以“智新境,向远大”为主题,正式对外发布全新发展战略及使命、愿景;同时,代表未来AI出行趋势的智慧出行解决方案Smart Solution 3.0重磅亮相。 一、把握变革节点 创领产…...
全面解析 classification_report:评估分类模型性能的利器
解读 classification_report 的使用:评估分类模型性能的关键工具 在机器学习中,分类任务是最常见的应用场景之一。无论是垃圾邮件过滤、图像识别还是情感分析,分类模型的性能评估都是至关重要的一步。而 classification_report 是 Scikit-le…...
Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
本以为搭建和访问FTP服务器的功能已经是被淘汰的技术了,只会在学习新技术的时候才会了解学习学习,WinFrom版本,和windows Api版本访问FTP服务器的功能示例也都写过。没想到这次会在项目中再次遇到, 这里记录下使用Qt开源库QFtpSer…...
图像后处理记录
图像后处理记录 ocr后处理记录 opencv裁剪 编译命令 cmake -S . -B build-x64 -DBUILD_LIST"core,imgproc,imgcodecs,highgui" -DBUILD_SHARED_LIBSOFF -DBUILD_opencv_appsOFF -DBUILD_opencv_jsOFF -DBUILD_ANDROID_PROJECTSOFF -DBUILD_ANDROID_EXAMPLESOFF -…...
解决element中的el-anchor链接被作为路由跳转导致页面404
解决element中的el-anchor链接被作为路由跳转导致页面404 问题: 在使用elementPlus时,el-anchor-link中的href被识别为路由进行跳转,导致不能正常跳转到锚点,且页面显示404。 解决:自定义方法解决 <!--添加hand…...
Mapreduce中maven打包
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar包),并发运行在…...
C++初阶——string的使用(下)
C初阶——string的使用(下) 一、string类对象的容量操作 对于string的容量操作,我们可以通过顺序表来理解,顺序表是通过动态数组来实现的,在数据结构专栏的第一篇就是顺序表的详细讲解,链接如下ÿ…...
AIGC vs 人类创作者:是竞争还是协作?
AIGC vs 人类创作者:是竞争还是协作? 随着人工智能技术的飞速发展,特别是生成式AI(AIGC, AI-Generated Content)的崛起,越来越多的领域开始出现AI的身影。从文本创作、图像生成到音乐制作,AIGC…...
Stable Baselines3 结合 gym 训练 CartPole 倒立摆
视频讲解: Stable Baselines3 结合 gym 训练 CartPole 倒立摆 今天介绍下stable_baselines3和gym,可以方便实现DL的实现,应用在机械臂catch、reach等场景 测试代码仓库:https://github.com/LitchiCheng/DRL-learning.git https:…...
ctfshow web8
前言 学习内容:简单的盲注脚本的书写 web8 这个题目题目手动注入很麻烦 主要是他过滤了 union 空格和 过滤了union的解决方法 1、使用盲注(报错注入和盲注) 2、使用时间盲注 3、堆叠注入 盲注脚本的书写 首先他是有注入点的 然后熟悉requests包的使用 …...
Linux程序地址空间
目录 研究背景 程序地址空间回顾 来段代码感受一下 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活跃队列(只出不进) 过期队列(只进不出) active指针和expired指针 总结 研究背景 Linux内核版本&#…...
破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
丝滑升级拥抱大模型:详解AI时代的应用智能化升级路径 破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级AI原生时代 ——十年代码无需重写,三步开启智能化跃迁 作者:孤弋、孚阳 序幕:一场跨越 20 年的技术对话 在杭…...
游戏引擎学习第240天:将渲染器移至第三层
这节又枯燥又无聊简直了 回顾并为今天的内容做铺垫 昨天我们说到,想对渲染器和平台层的集成方式做一些修改。我们之前简单讲了一下修改的目的:我们希望游戏本身不再直接调用 OpenGL 的渲染代码,而是只生成一组渲染指令缓冲区,然…...
2025.04.23华为机考第三题-300分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 时空旅行者的最优路径 问题描述 A先生是一名时空旅行者,他可以在不同的时空点之间穿梭。每次从一个时空点跳跃到另一个时空点需要消耗一个时间单位。在每个时空点,都有一些特…...