NO IMAGE

問題描述:服務端做了一個心跳檢測,規定的時間範圍內app沒有傳送資料過來,然後伺服器主動close掉這個連線,但是發現並沒有真正的關掉,連線而是都處於CLOSE_WAIT狀態。

解決方案:

1.調整linux下/etc/sysctl.conf引數,裡面增加

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5

 然後執行sysctl -p 讓它立即生效
(主要把tcp_keepalive_time 由預設7200秒調小了,當然其他引數也有影響)
2.修改netty啟動TCP引數,
去掉ChannelOption.SO_LINGER這個引數,選擇ChannelOption.SO_LINGER預設引數(這個引數的意義大家自己看資料)

然後重啟伺服器,發現一切歸於正常

參考文章:

http://www.itkeyword.com/doc/7516816089466273482