1. 程式人生 > 其它 >TIME-WAIT 存在導致無法啟動新服務

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