电脑之家 - 专业计算机基础知识与电脑技术学习网站
分类导航

路由器|交换机|网络协议|网络知识|

服务器之家 - 电脑之家 - 网络技术 - 网络协议 - 一次TCP TIME_WAIT连接数过多告警处理

一次TCP TIME_WAIT连接数过多告警处理

2024-01-22 14:27运维之美 网络协议

客户环境上在业务高峰期的时候,突然收到主机的TCP time_wait连接数告警过多的告警。运维侧及时介入分析,通过本文的处理方式和思路,希望给你在问题处理过程中提供灵感。

一次TCP TIME_WAIT连接数过多告警处理

问题回顾

客户反馈收到如下告警,主机TCP timewait连接数过多

一次TCP TIME_WAIT连接数过多告警处理

prometheus告警表达式

node_sockstat_TCP_tw > 50000

收到连接数过多的告警并不代表一定会产生生产问题,此时要关注负载是否直线上升,连接数一直无法释放,如果出现此情况,则需要及时处理,避免造成生产环境宕机。

一次TCP TIME_WAIT连接数过多告警处理

连接数数据来源:/proc/net/sockstat

线上场景中,持续的高并发场景

  • 一部分 TIME_WAIT 连接被回收,但新的 TIME_WAIT 连接产生,新产生的连接数超过释放的速度;
  • 一些极端情况下,会出现大量的 TIME_WAIT 连接。

Think:上述大量的 TIME_WAIT 状态 TCP 连接,有什么业务上的影响吗?

Nginx 作为反向代理时,大量的短链接,可能导致 Nginx 上的 TCP 连接处于 time_wait 状态:

每一个 time_wait 状态,都会占用一个「本地端口」,上限为 65535

当大量的连接处于 time_wait 时,新建立 TCP 连接会出错,address already in use : connect 异常

Tips:TCP 本地端口数量,上限为 65535(6.5w),这是因为 TCP 头部使用 16 bit,存储「端口号」,因此约束上限为 65535。

一次TCP TIME_WAIT连接数过多告警处理图片

  • time_wait 状态的影响

TCP 连接中,「主动发起关闭连接」的一端,会进入 time_wait 状态

time_wait 状态,默认会持续 2 MSL(报文的最大生存时间)

time_wait 状态下,TCP 连接占用的端口,无法被再次使用

TCP 端口数量,上限是 6.5w(65535,16 bit)

net.ipv4.ip_local_port_range = 1024 65000  #端口数和这个参数有关系

大量 time_wait 状态存在,会导致新建 TCP 连接会出错,address already in use : connect 异常

大量的连接会导致服务器资源使用上升

  • 现实场景

服务内部调用过多,优化业务模式,也可以是连接关闭方式需要优化

Nginx 反向代理场景中,可能出现大量短链接,服务器端可能存在

  • 解决思路

1、服务器端允许 time_wait 状态的 socket 被重用

2、缩减 time_wait 时间,设置为 1 MSL(即,2 mins)

解决方案

TCP连接数统计脚本

#!/bin/sh
for i in  /proc/* ;
do
  if [ -d $i/fd ];then
    echo $i   $(ls $i/fd -l | grep socket: |wc -l)
  fi
done

通过这个脚本可以统计出当前分配连接数的进程,通过进程可以找到对应的服务,如果是服务关闭连接的姿势不对,业务方优化即可

在业务侧解决此问题之前,我们可以通过操作系统的内核参数缓解此问题

方案

修改配置文件/etc/sysctl.conf

1、允许将TIME_WAIT状态的socket重新用于新的TCP连接

net.ipv4.tcp_tw_reuse = 1   #默认为0,表示关闭,如果为0,修改为1

2、快速回收TIME_WAIT状态的socket

net.ipv4.tcp_tw_recycle = 1   #修改为1,默认为0

3、修改time_wait连接数的回收时间

cat /proc/sys/net/ipv4/tcp_fin_timeout #查看默认的MSL值
net.ipv4.tcp_fin_timeout = 30 #如果为60,修改为30s回收

最后sudo sysctl -p  使配置生效即可,从修改前后的效果上可以看到,timewait的回收明显加快了

一次TCP TIME_WAIT连接数过多告警处理

原文地址:https://mp.weixin.qq.com/s/sYYXGB3ICWN7FBmoJkPo1Q

延伸 · 阅读

精彩推荐
  • 网络协议网络协议之:基于UDP的高速数据传输协议UDT

    网络协议之:基于UDP的高速数据传输协议UDT

    UDP相对TCP协议而言,其特点就是简洁,它删除了在TCP协议中为了保证消息准确性的各种限制性特征。简洁带来的好处就是快!今天给大家讲解一下,基于UD...

    flydean程序那些事8832021-12-14
  • 网络协议最全面的IGMP协议总结

    最全面的IGMP协议总结

    IGMP互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。...

    三旺通信5232022-02-23
  • 网络协议TCP的三次握手与四次挥手

    TCP的三次握手与四次挥手

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP的主要目标是提供一种可靠的、有序的和错误...

    沐雨花飞蝶5712024-01-12
  • 网络协议浅谈ICMP协议

    浅谈ICMP协议

    ICMP 是 Internet 控制信息协议(ICMP),是 IP 组的一个整合部分。通过 IP 包传送的 ICMP 信息主要用户涉及网络操作或错误操作的不可达信息。ICMP 包发送是不可靠...

    shaoming3147242022-10-08
  • 网络协议面试官竟然把TCP三次握手和四次挥手问的这么详细?

    面试官竟然把TCP三次握手和四次挥手问的这么详细?

    本文会围绕,从三次握手和四次挥手相关的一系列核心问题,分享如何更准确回答和应对常见的面试问题,以后面对再刁钻的面试官,你都可以随意地跟他...

    网络工程师阿龙8132022-08-29
  • 网络协议IPFS能否成为新一代互联网协议?

    IPFS能否成为新一代互联网协议?

    本文将分析IPFS的特性,并在与其他分布式文件系统和超文本传输协议(HTTP)比较的基础上,进行并行研究。...

    WebView社区4102021-12-10
  • 网络协议从一次线上问题说起,详解 TCP 半连接队列、全连接队列

    从一次线上问题说起,详解 TCP 半连接队列、全连接队列

    某次大促值班 ing,对系统稳定性有着充分信心、心态稳如老狗的笔者突然收到上游反馈有万分几的概率请求我们 endpoint 会出现 Connection timeout 。...

    云巅论剑11482021-10-28
  • 网络协议你需要知道的 TCP 三次握手

    你需要知道的 TCP 三次握手

    如果要在客户端和服务端创建 TCP 连接,我们需要在开始的时候发送三个请求确认双方的通信能力正常,这三次连接就被称为 TCP 的三次握手。...

    前端西瓜哥10142022-08-29