net.ipv4.tcp_max_tw_buckets 配置說明(轉)


因為前些天遇到大量 TIME_WAIT 導致端口耗盡服務異常的情況,讓我注意到這個參數。
先說它的作用:在 TIME_WAIT 數量等於 tcp_max_tw_buckets 時,不會有新的 TIME_WAIT 產生。

tcp_max_tw_buckets 應該如何配置

如果不是類似 Nginx 之類的中間代理(即不擔心端口耗盡),你通常不用關心這個值,使用官方默認的就好,甚至官方建議在內存大的情況下可以增加這個值。

類似 Nginx 之類的中間代理一定要關注這個值,因為它對你的系統起到一個保護的作用,一旦端口全部被占用,服務就異常了。 tcp_max_tw_buckets 能幫你降低這種情況的發生概率,爭取補救時間。

這個值可能有什么不好的影響

在完全下面 2 條完全滿足的情況下

  1. 當前服務器主動關閉連接
  2. 當前服務器 TIME_WAIT 數等於或大於 tcp_max_tw_buckets

可能會出現兩種異常情況:
① 對端服務器發完最后一個 Fin 包,沒有收到當前服務器返回最后一個 Ack,又重發了 Fin 包,因為新的 TimeWait 沒有辦法創建 ,這個連接在當前服務器上就消失了,對端服務器將會收到一個 Reset 包。因為這個連接是明確要關閉的,所以收到一個 Reset 也不會有什么大問題。(但是違反了 TCP/IP 協議)
② 因為這個連接在當前服務器上消失,那么剛剛釋放的端口可能被立刻使用,如果這時對端服務器沒有釋放連接,當前服務器就會收到對端服務器發來的 Reset 包。如果當前服務器是代理服務器,就可能會給用戶返回 502 錯誤。(這種異常對服務或者用戶是有影響的)

建議

綜合收益與成本,以下給出我的建議:
在只有 60000 多個端口可用的情況下,配置為

net.ipv4.tcp_max_tw_buckets = 55000

(在盡可能不違反 TCP/IP 協議的情況下保證系統的可用性)

參考文檔

https://yq.aliyun.com/articles/2519?spm=a2c4e.11163080.searchblog.9.77852ec15TOj6z
官方文檔: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt



作者:ZhiXiong
鏈接:https://www.jianshu.com/p/b7e991be0909
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

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



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