net.ipv4.tcp_max_tw_buckets 配置說(shuō)明

因?yàn)榍靶┨煊龅酱罅?TIME_WAIT 導(dǎo)致端口耗盡服務(wù)異常的情況,讓我注意到這個(gè)參數(shù)。
先說(shuō)它的作用:在 TIME_WAIT 數(shù)量等于 tcp_max_tw_buckets 時(shí),不會(huì)有新的 TIME_WAIT 產(chǎn)生。

tcp_max_tw_buckets 應(yīng)該如何配置

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

類似 Nginx 之類的中間代理一定要關(guān)注這個(gè)值,因?yàn)樗鼘?duì)你的系統(tǒng)起到一個(gè)保護(hù)的作用,一旦端口全部被占用,服務(wù)就異常了。 tcp_max_tw_buckets 能幫你降低這種情況的發(fā)生概率,爭(zhēng)取補(bǔ)救時(shí)間。

這個(gè)值可能有什么不好的影響

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

  1. 當(dāng)前服務(wù)器主動(dòng)關(guān)閉連接
  2. 當(dāng)前服務(wù)器 TIME_WAIT 數(shù)等于或大于 tcp_max_tw_buckets

可能會(huì)出現(xiàn)兩種異常情況:
① 對(duì)端服務(wù)器發(fā)完最后一個(gè) Fin 包,沒(méi)有收到當(dāng)前服務(wù)器返回最后一個(gè) Ack,又重發(fā)了 Fin 包,因?yàn)樾碌?TimeWait 沒(méi)有辦法創(chuàng)建 ,這個(gè)連接在當(dāng)前服務(wù)器上就消失了,對(duì)端服務(wù)器將會(huì)收到一個(gè) Reset 包。因?yàn)檫@個(gè)連接是明確要關(guān)閉的,所以收到一個(gè) Reset 也不會(huì)有什么大問(wèn)題。(但是違反了 TCP/IP 協(xié)議)
② 因?yàn)檫@個(gè)連接在當(dāng)前服務(wù)器上消失,那么剛剛釋放的端口可能被立刻使用,如果這時(shí)對(duì)端服務(wù)器沒(méi)有釋放連接,當(dāng)前服務(wù)器就會(huì)收到對(duì)端服務(wù)器發(fā)來(lái)的 Reset 包。如果當(dāng)前服務(wù)器是代理服務(wù)器,就可能會(huì)給用戶返回 502 錯(cuò)誤。(這種異常對(duì)服務(wù)或者用戶是有影響的)

建議

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

net.ipv4.tcp_max_tw_buckets = 55000

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

參考文檔

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

2019年5月19日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容