問題:在開發測試時發現斷開與服務器端口后再次連接時拒絕連接。
分析:服務器上查看端口占用情況,假設端口為8888。
netstat -anp |grep 8888
發現端口8888端口顯示被占用(ip為本機ip確定是上次連接)且狀態為ESTABLISHED,然而實際上連接已經斷開,但是服務端沒有斷開連接,查看TCP的keepalive配置。
sysctl -a |grep keepalive
發現為默認的配置
-
net.ipv4.tcp_keepalive_time = 7200
-
net.ipv4.tcp_keepalive_probes = 9
-
net.ipv4.tcp_keepalive_intvl = 75
默認情況下在連接空閑7200秒即2個小時后才會發送keepalive探測包來確認連接情況。
解決:通過修改keepalive配置為合適的值(如改為200秒)可以快速釋放端口連接。
臨時修改,通過echo設置tcp_keepalive_time。
echo "200" > /proc/sys/net/ipv4/tcp_keepalive_time
永久生效,編輯/etc/sysctl.conf,新增或修改為
net.ipv4.tcp_keepalive_time = 200
然后執行命令使修改后的配置生效
sysctl -p
from:https://www.cnblogs.com/chinaops/p/9469214.html