net.ipv4.tcp_tw_recycle致使的請求超時

背景:線上環境登陸頁,大量請求超時無響應。檢查網正常,服務器CPU,內存等參數也都正常。ruby

參考:https://www.jianshu.com/p/893b5d7e9f30服務器

緣由:服務器啓用了net.ipv4.tcp_tw_recycle機制tcp

當開啓了tcp_tw_recycle選項後,當鏈接進入TIME_WAIT狀態後,會記錄對應遠端主機最後到達分節的時間戳。若是一樣的主機有新的分節到達,且時間戳小於以前記錄的時間戳,即視爲無效,相應的數據包會被丟棄;spa

一個公網IP(通過NAT)大量地去反問服務器,不一樣客戶端的時間可能不一致,因此就會出現時間戳錯亂的現象,因而後面的數據包就被丟棄了,具體的表現一般是是客戶端明明發送的SYN,但服務端就是不響應ACK,還能夠經過下面命令來確認數據包不斷被丟棄的現象;code

  • 查看主機TCP鏈接數
  • netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解決:ip

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 0內存

相關文章
相關標籤/搜索