一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路

故障发散-Recv-Q阻塞 之前有个开发遇到个生产问题,开发发现有时候CS之间的心跳直接丢了,查看日志发现客户端一直没收到心跳报文,但服务端其实已经把报文发了,觉得很奇怪,TCP 是可靠链接,不可能丢了吧,最终是发现了netstat 里的recv-q 有积压导致的,问题虽然解决了,但还是需要复盘一下,看看细节。 先看下啥是Recv-Q 和 Send-Q Recv-Q Established: The count of bytes not copied by the user program connected to this soc 阅读详情

 

第一天故障:

现象:

公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~

后台504打不开,偶尔能刷出来也是很慢。。大概过了10分钟新后台也挂了,也就是公司所有业务全瘫痪了。。。问题严重了。。。

排查及原因:

先登陆到我们比较重视的新后台查看,有慢日志看慢日志没有慢日志先加慢日志。

简单查看了一下top  发现load较高,有时候能到20左右,忽高忽低不是很稳定,其他都还算正常。。

接着netstat大法查看下连接数情况,统计了一下大概8000多time_wait,平常肯定没这么多的量。

次数省略几千行...


 
  1. strace -p http的pid

  2.  
  3. strace -p php的pid

  4.  
  5. #通过strace工具追踪了一下web服务和php的进程id,查看他正在做什么?

 

通过跟踪发现有很多调用一个数据库的函数在堆积,找到相应文件下发现原来这里有一个数据库已经下线了,在切换数据库的时候没有更改这个地方,白天切换的时候没发现问题,到了晚上高峰期大量的调用在排队,(今天早上来了问了一下研发,这个调用超时时间是5秒) 导致了大量的TIME_WAIT等待。。堵死。。

处理:

将数据库更改为正常的IP解决了~

 

第二天老后台问题:

 晚上9点左右同样的情况。直接查看连接数情况,果然又堵车了。

 

又堵塞了,大量的连接数不释放,目前业务已经崩了大量的投诉,先快速释放连接数恢复业务。


 
  1. [root@vm-10 ]# cat /etc/sysctl.conf

  2. kernel.sysrq = 1

  3. kernel.core_uses_pid = 1

  4. kernel.msgmnb = 65536

  5. kernel.msgmax = 65536

  6. kernel.shmmax = 68719476736

  7. kernel.shmall = 4294967296

  8. net.ipv4.ip_forward = 0

  9. net.ipv4.conf.default.accept_source_route = 0

  10. net.ipv4.tcp_syncookies = 1

  11. net.ipv4.conf.default.rp_filter = 2

  12. net.ipv4.conf.all.rp_filter = 2

  13. net.ipv4.conf.all.arp_announce = 2

  14.  
  15. net.ipv4.tcp_tw_reuse = 1 #新增

  16. net.ipv4.tcp_tw_recycle = 1 #新增

  17. net.ipv4.tcp_fin_timeout = 30 #新增

  18. [root@vm-10 ]#

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,表示关闭。

果然调整完后连接数快速降下来了,然后strace查了一下系统调用,发现还有一个数据库没更改


 
  1. lstat("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", {st_mode=S_IFREG|0644, st_size=14994, ...}) = 0

  2. stat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)

  3. lstat("/aaa", {st_mode=S_IFDIR|0755, st_size=103, ...}) = 0

  4. lstat("/aaa/www", {st_mode=S_IFDIR|0755, st_size=38, ...}) = 0

  5. lstat("/aaa/www/html", {st_mode=S_IFDIR|0755, st_size=107, ...}) = 0

  6. lstat("/aaa/www/html/hangye.aaa.com", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

  7. lstat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)

  8. setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0

  9. rt_sigaction(SIGPROF, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, 8) = 0

  10. rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0

  11. getcwd("/", 4095) = 2

  12. chdir("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO") = 0

  13. setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0

  14. gettimeofday({1502634914, 509085}, NULL) = 0

  15. open("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", O_RDONLY) = 31

  

Wireshark专家模式实战:14种TCP异常深度解析与网络故障排查 网络协议分析是网络运维、应用性能调优和安全审计的基础。TCP/IP作为互联网的核心协议栈,其可靠性、流量控制和拥塞控制机制保证了数据的稳定传输。理解TCP的工作原理,如序列号、确认机制、滑动窗口等,对于诊断网络延迟、连接中断和吞吐量下降等问题具有关键的技术价值。在实际的工程实践中,借助专业的抓包工具对TCP交互进行深度分析,已成为定位网络层和应用层问题的标准方法。其中,Wireshark的专家模式通过内置的规则引擎,能够自动识别并高亮显示诸如**TCP重传**、**零窗口**等协议异常行为,极大地提升了排查 阅读详情

相关推荐

Kali Linux环境下DDoS攻击原理、实验与防御实战解析

分布式拒绝服务攻击是网络安全领域常见的资源耗尽型威胁,其核心原理在于利用僵尸网络向目标发起海量请求,消耗其带宽、连接池或计算资源,导致服务不可用。从技术实现看,DDoS攻击可分为网络层、传输层和应用层等多种类型,例如SYN Flood通过耗尽TCP半连接队列实现攻击,而HTTP Flood则模拟正常用户行为更难防御。理解这些攻击的原理和流量特征,对于构建有效的检测与防御体系至关重要。在渗透测试与安全评估中,使用Kali Linux等工具在隔离环境进行模拟测试,是验证系统抗压能力和防御策略的有效手段。本文将从

weixin_34220179的博客 575

网络问题的排查解决

一条很有用的命令解决tcp数据发送积压问题netstat -anpt|grep 2181|awk ‘{if($2!=0||$3!=0) print $0}’ 以kafka为例:开源kafka默认配置的据传输端口是2181,kafka server会监听2181端口,等待客户端连接, netstat -anpt的输出所有的tcp连接信息 netstat -anpt|gre...

DoasIsay的博客 6169

SpringCloud-Feign[HttpClient连接池]

  为什么 http 连接池能提升性能? http 的背景原理 a. 两台服务器建立 http 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。 b. Http 连接需要的 3 次握手 4 次分手开销很大,这一开销对于大量的比较小的 http 消息来说更大。 优化解决方案 a. 如果我们直接采用 http 连接池,节约了大量的 3 次握手 4 次分手;这样能大大提升吞吐率。 ...

波波烤鸭的博客 8566

socket调试

established

tornadoHot的专栏 2657

【信息科学与工程学】【通信工程】第一百九十一篇 路由器体系结构03

编号类型领域问题详细的数学分析(逐步推理)参数列表(表达式 / 数值范围 / 边界 / 测量)关联知识839DCI演进 · 收敛DCI 2030 年三大技术收敛方向步骤1:方向一:IPoDWDM 成为绝对主流(Omdia 2027 59% → 2030 80%+),OTN 退化为 OLS 纯光层。步骤2:方向二:800ZR+ 取代 400ZR 成为主力速率,PCS 使 800G 达 600–1000km。步骤3:方向三:AI 集群 DCI 催生 1.6T/3.2T 超短距(<10km)相干模块(OSFP-X

weixin_49199313的博客 867

NCBI|叶绿体基因组数据上传

叶绿体基因组NCBI上传 小编最近在NCBI上传了好几次数据…想着可以把具体的上传步骤写下来,供大家参考。以下是叶绿体基因组的上传示例,大家可以瞅瞅 图片 准备工作 1.登录NCBI官网:https://www.ncbi.nlm.nih.gov/, 依次点击“sign in to NCBI”——“See more 3rd party sign in options”——搜索“Microsoft live.com”。 ”sign in to NCBI“ ”See more 3rd party sign i

weifanbio的博客 3904

一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路

记录一下周末出现问题~ 仅自己摘记不做任何参考。 第一天故障: 现象: 公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~ 后台504打不开,偶尔能刷出来也是很慢。。大概过了10分钟新后台也挂了,也就是公司所有业务全瘫痪了。。。问题严重了。。。 排查及原因: 先登陆到我们比较重视的新后台查看,有慢日志看慢日志没有...

weixin_33836874的博客 3639

保姆级教程:用Multisim仿真快速上手二极管、MOSFET和IGBT的开关特性

本文提供了一份详细的Multisim仿真教程,帮助读者快速掌握二极管、MOSFET和IGBT的开关特性。通过搭建实验电路、观察波形特征和参数影响分析,深入解析了反向恢复过程、米勒平台现象和拖尾电流效应。适合电力电子初学者和工程师通过仿真建立直观理解,提升电路设计能力。

weixin_29290863的博客 499

并行分布式框架:Celery、rq、funboost

Celery是一个异步任务的调度工具,也可以叫做 "分布式任务队列(Distributed Task Queue)"。

freeking101的博客 5万+

YOLOv5 自定义模型 Android 部署完整指南

本文详细介绍了将YOLOv5模型部署到Android设备的完整流程,包含三个核心部分:首先验证官方模型测试,确保基础环境配置正确;随后进行模型转换,从PyTorch导出ONNX格式并优化,再转换为NCNN格式;最后在Android项目中集成自定义模型,包括文件替换、参数修改和代码适配。教程基于YOLOv5 6.1版本,使用NCNN框架进行移动端推理,涵盖了常见问题解决方案和关键配置要点,为开发者提供了从训练到部署的完整技术路线。

FJN110的博客 592

Pytest教程:Pytest插件原理

Pytest的插件系统是其强大功能的核心,它允许用户和开发者扩展和定制测试框架的行为。要深入理解Pytest插件的原理,我们需要从Pytest的架构和设计模式开始,然后深入到底层源码。

旦莫的博客 637

Linux

多线程、shell语句、网络编程、mysql数据库、git远程仓库以及redis数据库与缓存的总结性学习

2601_94965056的博客 577

2026最新YOLO26改进:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

针对YOLO26模型改进痛点,本专栏整理200+实战验证方法,覆盖卷积层、注意力机制等核心模块。 每种方法含原理、性能分析、改进路径及实操流程,代码可直接运行,快速提升模型效果,性价比超高。

魔改工程师的博客 1万+

UDP Socket接收缓冲区与netstat Recv-Q

UDP Socket接收缓冲区与netstat Recv-Q 我们通常使用netstat查看网络的诸多状态,其中包含Send-Q与Recv-Q。 我们知道: 每一个Socket对象在系统中都被映射为一个Socket文件; 每一个Socket对象在系统中都关联有两个内核缓冲区:一个接收缓冲区(读缓冲区),一个发送缓冲区(写缓冲区); Send-Q:指代的是内核中Socket对应的发送缓冲区...

test1280 9933

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1113

【专栏必读】王道考研408数据结构+算法设计与分析万字笔记使用说明及章节导航

各位老铁思维导图在我整理完笔记后会放上去的,我需要根据王道的思维导图重新再做一遍 文章目录一:有关注意事项二:关于专栏三:学习建议四:各专栏导航(各位老铁别催,质量优先)(1)第一章:绪论(2)第二章:线性表(3)第三章:栈和队列第四章:串第五章:二叉树第六章:图 首先感谢王道大大(手动比心),很用心在做了,大家可以看其中两节是否符合胃口 (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序) (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转 一:有.

快乐江湖的博客 5万+

ss命令和Recv-Q和Send-Q状态

tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。注意,之前我对 Recv-Q/Send-Q 的理解有些误差,使用 ss 获取到的 Recv-Q/Send-Q 在 LISTEN 状态以及非 LISTEN 状态所表达的含义是不同的。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。

神棍之路 2648

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 323

Recv_Q 内积攒很多数据包问题

[root@active ~]# netstat -an | grep 4113 tcp        0      0 172.31.1.205:4113           0.0.0.0:*                   LISTEN      udp   2094080      0 0.0.0.0:4113                0.0.0.0:*

Dalek的专栏 7529

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux进程间通信之消息队列

Linux进程间通信之消息队列 一.消息队列 Msqid_ds 维护消息队列的结构体,队列的第一个消息指针msg_first,最后一个消息指针msg_last 消息中有一个成员指针next 每一个消息中包含有哪些内容: Data 数据 Length 数据的长度 Type 数据的类型。 例如: 1----voltage data 2----电流数据 3----有功功率 与其他的不同的是内核空间创建的是一个链式队列 消息的接收端可以根据消息的类型来接收。 |文件I/O | 消息队列| |op

Danny_llp的博客 681

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Netstat 中 Recv-Q和Send-Q状态

执行命令查看当前网络状态时候发现,执行了命令 netstat -anp 发现recv-q 和 send-q 状态不是很正常,对这2个参数不了解,特意学习了一下,简单总结如下: recv-Q 表示网络接收队列 表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv() 如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。 send-Q 表示网路发送队列 对方没有收到的数据或者说没有Ack的,还是本地缓冲区. 如果发送队列Send-Q不

好习惯成就伟大 8151

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mysql进阶(三)

初始化密码发生报错 需要安装 [root@localhost ~]# dnf install -y ncurses-compat-libs

m0_56681539的博客 415

哑代理 - TCP链接高Recv-Q,内存泄露的罪魁祸首

1. 问题现象 使用netstat -ntp命令时发现,Recv-Q 1692012 异常偏高(正常情况下,该值应该是0),导致应用占用过多的内存。 tcp 1692012 0 172.17.72.4:48444 10.254.149.149:58080 ESTABLISHED 27/node 问题原因:代理的转发时,没有删除逐跳首部 2...

weixin_33726313的博客 1838

如何优雅的中断线程

前言 有时候我们需要中断一个线程。由于启动一个线程的方法是start(),所以终止一个线程很容易想到stop(),JDK在 java.lang.Thread类中确实提供了一个stop()方法,这个方法的作用是强制停止一个线程。但是从jdk1.2开始就被标记@Deprecated废弃了,因为强制停止一个线程不管该线程是否执行完成,并且会释放该线程持有的锁,因此会产生安全问题。 ...

Sicimike的博客 2578
上一篇: Linux netstat命令详解及state的含义
下一篇: TCP 这几个参数
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值