2017年3月1日 星期三

[Linux] 發生大量的 TIME_WAIT

在做Network Monitor時,觀察netstat -luntpa時,發現了大量的Socket正處於TIME_WAIT狀態。這是因為當Client發出close()時,TCP Stack並不會立即結束,而是會先處於在TIME_WAIT的狀態,直到時間超過MSL*2之後,才會正式Release這個資源[1]。這樣的設計是TCP/IP為了保護還沒處理完的事,所以提供這樣的保護機制。但如果短時間內有大量的Request時,這時可能會將Tcp的資源給吃光。

Linux Kernel支援了兩個設定來解決這個問題
  • tcp_tw_recycle :啟動縮短TIME_WAIT的時間(注意 : 使用該參數在NAT環境下可能會發生問題。)
    echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
  • tcp_tw_reuse: reuse在TIME_WAIT下的資源
    echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse

沒有留言:

張貼留言