【轉】Linux下tcp連接斷開后不釋放的解決辦法


問題:在開發測試時發現斷開與服務器端口后再次連接時拒絕連接。

分析:服務器上查看端口占用情況,假設端口為8888。

netstat -anp |grep 8888

發現端口8888端口顯示被占用(ip為本機ip確定是上次連接)且狀態為ESTABLISHED,然而實際上連接已經斷開,但是服務端沒有斷開連接,查看TCP的keepalive配置。

sysctl -a |grep keepalive

發現為默認的配置

  1.  
    net.ipv4.tcp_keepalive_time = 7200
  2.  
    net.ipv4.tcp_keepalive_probes = 9
  3.  
    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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM