發現很多time_wait連線,但是程序fd正常,connect 返回-1時候errno==99 cannot assign requested address的解決辦法
今天多程序導資料時候,遇到乙個問題,現象是 多程序跑一會,所有程序開始connect 返回-1 同時errno==99 cannot assign requested address。看每乙個程序的fd是正常的 各種方法檢測到,確認沒有fg洩露跡象!但是netstat時候發現大量的time_wait連線,埠被佔完了,是導致connect 返回-1 同時errno==99 cannot assign requested address的原因。
網路搜尋得到乙個解釋:客戶端頻繁的連伺服器,由於每次連線都在很短的時間內結束,導致很多的time_wait,以至於用光了可用的埠號,所以新的連線沒辦法繫結埠,即「cannot assign requested address」
其實書上看過 close時候只是把fd的使用數-1,但是還沒有**鏈結,這時候需要修改系統引數,快速**使用數已經為0 的鏈結(即正常close的df)。
解決辦法:
sysctl -w net.ipv4.tcp_tw_recycle=1 表示開啟tcp連線中time-wait sockets的快速**
執行此命令後 茫茫多的程序終於正常了...
(還有乙個 sysctl -w net.ipv4.tcp_timestamps=1 開啟對於tcp時間戳的支援,若該項設定為0,則下面一項設定不起作用)
TCP連線出現很多TIME WAIT
我為啥會發現呢,本來任務是發現pinpoint上有的請求時間等待間隙過長,為了查詢出tomcat的api鏈路有等待的。我開始排查tcp的連線開始,然後再到tomcat的執行緒優化數。再檢查到tcp連線的時候發現了大問題。netstat ant grep 8080 wc l使用以上命令檢視tomcat...
大量TIME WAIT連線的解決辦法
根據tcp協議的連線斷開規定,發起socket主動關閉的一方,socket將進入time wait狀態,time wait狀態將持續2個msl max segment lifetime 在windows下預設為4分鐘,即240秒,time wait狀態下的socket不能被 使用。具體現象是對於乙個...
TIME WAIT解決辦法
伺服器 windows 檢視了下系統程序,netstat an 192.168.12.13 3306 192.168.12.12 30443 time wait 192.168.12.13 3306 192.168.12.12 30444 time wait 192.168.12.13 3306 1...