生产环境 TIME_WAIT 状态过多排查与 Linux 内核参数调优记录
【摘要】 服务器出现大量短连接导致端口耗尽、无法建立新连接。本文解析 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)