TIME-WAIT 存在导致无法启动新服务

问题描述

之前的一个服务挂机了 准备再次启动 但是怎么都起不来 发现端口占用 还是 TIME-WAIT 类型的

$  ss -ntlpau |grep 50020
tcp    TIME-WAIT  0      0      10.104.2.132:50020              10.104.17.29:15101              
tcp    TIME-WAIT  0      0      10.104.2.132:50020              10.104.17.39:17403              
tcp    TIME-WAIT  0      0      10.104.2.132:50020              10.104.7.143:15104              
tcp    TIME-WAIT  0      0      10.104.2.132:50020              10.104.7.27:15101 

检查内核参数

$ /sbin/sysctl -a |grep tcp_tw_
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0

解决

编辑内核文件/etc/sysctl.conf,加入以下内容:

net.ipv4.tcp_tw_reuse = 1   # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 # 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

然后执行 /sbin/sysctl -p 让参数生效.
然后等待5分钟左右,让系统把之前的 TIME-WAIT 回收走 ,再次启动服务即可

拓展:检查当前的 TIME_WAIT 个数

$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 1
SYN_RECV 1
ESTABLISHED 17366
FIN_WAIT2 1
TIME_WAIT 154013

参考文档
解决Linux TIME_WAIT过多造成的问题:https://blog.csdn.net/zhangjunli/article/details/89321202

posted @ 2022-04-15 17:06  鸣昊  阅读(63)  评论(0编辑  收藏  举报