我知道這是很正常的設置tcp_max_tw_buckets到一個相對較小的數字,如30000或50000,以避免主機有很多時間等待狀態連接和應用程序無法打開新的情況。這是提到很多東西。諸如這樣的問題:How to reduce number of sockets in TIME_WAIT?將tcp_max_tw_buckets設置爲非常小的值會產生什麼副作用?
像以前一樣,我知道時間的等待是爲了避免TCP數據包out of order的狀態,並且它可以使用some other approach來應對它更好。如果你把它設置爲少數可能會出錯的東西。
我覺得我在想要將tcp_max_tw_buckets設置爲一個小數字的地方,並且不知道具體的場景,我會避免它。
所以我的問題是什麼是將tcp_max_tw_buckets設置爲一個非常小的值的副作用,我可以使用實驗室環境設置一個特定的方案,少量的tcp_max_tw_buckets會導致麻煩?
我的情況是一個系統有很多內部的HTTP API,而服務器是一個PHP服務器,它實際上都是服務器和客戶端,大量的時間等待連接生成爲PHP請求其他內部API通過HTTP,但沒有通過「Connection:close」HTTP頭關閉它。所以限制tcp_max_tw_buckets是我現在可以使用的最佳解決方案。 – pingz
我不明白'connection:close'的部分,但最好的解決方案是在客戶端PHP代碼中允許HTTP Keepalive和連接池(如果支持的話)。這會導致更少的連接存在,並且它們將傾向於保持開放而不是關閉,並且通過TIME_WAIT。 – EJP
'Connection:close'參照[rfc2616 section 14.10 Connection](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html),使用該頭文件客戶端可以釋放本地打開的端口,減少數量時間等待狀態的連接。我明白你的建議是最終的解決方案,但由於資源有限和時間有限,我必須忍受這種情況很長時間,所以我真的需要直接回答我的問題。 – pingz