生产环境 TIME_WAIT 状态过多排查与 Linux 内核参数调优记录

举报
yd_218612773 发表于 2026/11/04 10:43:03 2026/11/04
【摘要】 服务器出现大量短连接导致端口耗尽、无法建立新连接。本文解析 TIME_WAIT 产生机制并给出安全的 sysctl 内核优化策略。

一台高频调用第三方推送接口的微服务节点突然报出大量 Cannot assign requested address 错误,无法新建出站连接。

一、现场定位

使用命令查看系统当前连接状态分布:

ss -s
TCP:   32410 (estab 410, closed 31200, orphaned 0, timewait 31180)

发现 TIME_WAIT 状态的 socket 超过了 3 万个!由于对外请求默认使用系统临时端口范围(可通过 cat /proc/sys/net/ipv4/ip_local_port_range 查看,默认约 32768 到 60999),三万个处于 TIME_WAIT 的连接直接打满了可用本地端口。

二、为什么会产生 TIME_WAIT

根据 TCP 四次挥手协议,主动发起断开连接的一方在收到对端的 ACK 后,会进入 TIME_WAIT 状态,并持续等待 2MSL(通常为 60 秒),目的是确保网络中残存的报文完全消亡并确保对端能够收到最后的 ACK。

三、内核参数优化策略

编辑 /etc/sysctl.conf 进行针对性优化:

# 允许将处于 TIME_WAIT 状态的 socket 安全复用于新的 TCP 连接(仅对出站有效)
net.ipv4.tcp_tw_reuse = 1

# 缩减保持在 FIN-WAIT-2 状态的时间
net.ipv4.tcp_fin_timeout = 15

# 扩大本地可用端口范围
net.ipv4.ip_local_port_range = 10240 65535

# 增加 TCP 保持存活时间与探测包间隔
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

执行 sysctl -p 立即生效后,TIME_WAIT 连接复用率提升,端口耗尽问题彻底化解。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。