探讨如何减少Linux服务器TIME_WAIT过多的问题

【2025软考高级架构师】基础知识部分——6、软件架构设计 (1)架构是对系统的抽象(2)架构由多个结构组成(3)任何软件都存在架构(4)元素及其行为的集合构成架构的内容(5)架构具有“基础”性(6)架构隐含有“决策” 阅读详情

今天早上一上班,有同事就反映公司好几个网站都打不开,登陆数据库

服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到99%,可以肯定的是mysql连接出现问题:

netstat -an
192.168.12.13:3306      192.168.12.12:30443      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30444      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30445      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30446      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30447      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30448      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30449      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30450      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30451      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30452      TIME_WAIT
... ...

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.

在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的

DWORD键,设置为60,以缩短TIME_WAIT的等待时间

登陆到web服务器(linux):

netstat -ae |grep mysql
tcp     0      0 aaaa:53045          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53044          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53051          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53050          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53049          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53048          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53055          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53054          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53053          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53052          192.168.12.13:mysql           TIME_WAIT   root       0
tcp     0      0 aaaa:53059          192.168.12.13:mysql           TIME_WAIT   root       0

发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

vi /etc/sysctl.conf

编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

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 修改系統默认的 TIMEOUT 时间

修改之后,再用

netstat -ae|grep mysql
tcp     0      0 aaaa:50408       192.168.12.13:mysql       ESTABLISHED nobody     3224651
tcp     0      0 aaaa:50417       192.168.12.13:mysql       ESTABLISHED nobody     3224673
tcp     0      0 aaaa:50419       192.168.12.13:mysql       ESTABLISHED nobody     3224675

发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,各网站访问正常!!

以上只是暂时的解决方法,最后仔细巡查发现是前天新上线的一个系统,程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT

ZW3D 二次开发-制作插件 1.Windows 7 SP1 或 Windows 10 或 Windows 11(推荐 Windows 11)2.Visual studio 2017-2022 (或 C/C++的任何其他集成开发环境)(推荐 Visual studio 2022)3.ZW3D 2023 或以上版本(建议使用与 ZW3D 一致的 API 的版本)4.Qt5.9.7(for Windows)博主学习使用环境的是:Windows 11 Version 24H2 + Visual studio 2022 + Qt5.9.7(fo 阅读详情

相关推荐

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3456

TCP IP之TIME_WAIT状态

前段时间碰到一个服务器挂死问题,原因是由于服务器上的TCP连接数过多导致程序无法新建SOCKET连接,最后该问题解决了。中间在定位问题的时候查看但是操作系统上的TCP连接数,有几百个连接处于TIME_WAIT状态,这个TIME_WAIT到底是表示什么意思呢?     于是重新查看了下TCP协议,终于理清了,这里记录一下。下面的是TCP IP的状态变迁图:            从中可以看得

xishanxinyue的专栏 977

计算机网络实验六 RIP 配置实验

Man! What can I say?

AClerk的博客 1593

使用SO_LINGER缩短TIME_WAIT的时间,减少大量短链接堆积TIME_WAIT

经常会听到socket的优雅关闭问题: struct linger { int l_onoff; /* 0 = off, nozero = on */ int l_linger; /* linger time */ }; setsockopt(m_listenfd, SOL_SOCKET, SO_LINGER, &tmp, sizeof(tmp)); 通过setsockopt方法设置socket的配置项SO_LINGER 何为优雅: SO_LINGER选项用来设置延

BBinChina的专栏 631

非目标代谢组学(untargeted metabolomics)中常用的方法学考察的方法(四)

最早使用的一种方法,从QC样本的总离子流图中选择具有代表性的离子峰(覆盖不同的保留时间,不同的强度),在对QC样本进行重复检测之后,计算这些离子的保留时间以及峰面积的相对标准偏差(RSD),用以考察分析方法的稳定性以及重复性。所有样品检测完之后,收集所有的QC样本的原始数据进行数据预处理,包括(峰提取,排列,归一化等),经过数据过滤(80%规则)之后,计算剩下的峰的峰面积的RSD值。由于QC样本是 等量混合了所有的被检测样本,理论上QC样本包含了所有样本中的代谢物,因此QC样本理论上会。

hlllllllhhhhh的博客 1490

threejs加载3dtiles(倾斜摄影)数据

1、安装3dTilesRenderer 插件 使用npm 安装 npm install 3d-tiles-renderer --save 或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 2、使用 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRend..

weixin_39481659的博客 1万+

优化服务器以减少 TIME_WAIT

本文主要参考链接:https://www.jianshu.com/p/6eaac07c93ed 其它链接 :https://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads?print 背景 1. nginx 代理 nodejs, 但都在同一台服务器上 2. node...

wwxuelei的专栏 983

基于three.js的室内全景3D展馆案例分享

3D场景展厅

acheng 3559

Linux减少time_wait方法

检查net.ipv4.tcp_tw当前值,将当前的值更改为1分钟: [root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw net.ipv4.tcp_tw_reuse = 0 net.ipv4.tcp_tw_recycle = 0 [root@aaa1 ~]# vi /etc/sysctl 增加或修改net.ipv4.tcp_tw值: net.

jacky0922的专栏 4513

杰理-tone

低音质格式切换高音质格式:切换提示音格式,未导出,编译下载没有提示音;提示音导出,再次编译下载,提示音正常高音质格式切换低音质格式:不需要导出,直接编译下载,提示音正常。

m0_67447112的博客 955

基于Simulink雷达系统建模仿真(附源码)

此示例显示如何设置由发射器、带目标的信道和接收器组成的雷达系统仿真。一、系统架构该系统包括:雷达脉冲发生器,以 2% 占空比(导通时间 = 2 ms,周期 = 100 ms)输出功率为 1 mW 的啁啾声。RF发射器部分由滤波器和组成,使用RF模块集电路包络库模块实现。由于滤波器是线性器件,放大器是非线性器件,因此它们被分成两个独立的子系统。这种分离允许在每个子系统中使用不同的仿真频率集。这种分离还允许在更快的仿真速度和级联链中可用的级间负载效应损失之间进行权衡。

珞瑜的博客 4583

减少TIME_WAIT时间的优化配置

减少TIME_WAIT时间的优化配置 建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: net.ipv4.tcp_max_syn_backlog=8192 增加TCP SYN队列长度,使系统可以处理更多的并发连接 net.ipv4.tcp_syncookies = 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理...

weixin_34275734的博客 1077

基于fme和python-docx第三方库批量更新不动产调查表

最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。

weixin_43229258的博客 1240

python连接redis的time_wait数过高_解决TIME_WAIT过多造成的问题

sh-4.1# netstat -an |awk '/tcp/ {++S[$NF]}END {for (a in S) print a , S[a]}'TIME_WAIT41CLOSE_WAIT1ESTABLISHED2LISTEN7TCP/IP TIME_WAIT状态原理:通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态客户端主动关闭连接时,会发送最后一个ack后,然后...

weixin_39808893的博客 1181

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TIME_WAIT状态过多怎么办?关于tw_reuse和tw_recycle

https://www.cnblogs.com/whx7762/p/9413787.html https://cloud.tencent.com/developer/article/1412003 https://www.cnblogs.com/lulu/p/4149312.html 问题 这种情况比较常见,一些爬虫服务器或者WEB服务器(如果网管在安装的时候没有做内核参数优化的话)上经常会遇到这个问题,这个问题是怎么产生的呢? 1.防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次.

jojozym的博客 715

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

time_wait和close_wait产生原因及解决

为什么80%的码农都做不了架构师?>>> ...

weixin_33929309的博客 9685

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何解决TIME_WAIT过多的解决办法(附Socket中的TIME_WAIT状态详解)

linux和windows下TIME_WAIT过多的解决办法 如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,

zjl410091917的专栏 3万+

端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:C......

zzhongcy的专栏 18万+

性能案例-Linux下解决time_wait连接过多(Linux内核优化)

一、性能测试的主要概念和计算公式 系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。 单个reqeust对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟request/事务数量 并发数:系统同时处理的request/事务数 响应时间:一般取平均响应时间 理解了上面三个要素的意义之后,就能推算出它们之间的关系...

Jian Sun_的博客 2695

linux和windows下TIME_WAIT过多的解决办法

如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,发现这个状态很多也没什么大问题,但可能因为它占用了系统过多的端...

iteye_12587的博客 695

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

Linux服务器下查看网络连接的状态 netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}' 它会显示例如下面的信息: TIME_WAIT 814 CLOSE_WAIT 1 FIN_WAIT1 1 ESTABLISHED 634 SYN_RECV 2 LAST_ACK 1 常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT ...

Firefly_zh的博客 3444

TCP中的TIME_WAIT状态详解

linux和windows下TIME_WAIT过多的解决办法 如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短连接的方式和后端交互的原因,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的TIME_WAIT。查阅TIME_WAIT资料,

fengqiaojiangshui的专栏 2873
上一篇: 运维小技巧:使用ss命令代替 netstat
下一篇: PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较
da2015
博客等级 码龄12年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值