TIME-WAIT 存在導致無法啟動新服務
阿新 • • 發佈:2022-04-15
問題描述
之前的一個服務掛機了 準備再次啟動 但是怎麼都起不來 發現端口占用 還是 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