在Linux的核心中,TCP/IP協議的TIME-WAIT狀態持續60秒且無法修改。在某些情境下(例如TCP負載過高時),適當調小該值有助於提升網路效能。因此Alibaba Cloud Linux 2(核心版本4.19.43-13.al7
開始)和Alibaba Cloud Linux 3新增核心介面用於修改TCP TIME-WAIT狀態期間,從而提升網路效能和資源的利用率。
背景資訊
TCP/IP協議的TIME-WAIT狀態是指應用關閉用於通訊的套介面(socket)之後,TCP/IP協議棧保持socket處於開啟狀態,該狀態預設持續60秒,用來保證完成伺服器和用戶端的資料轉送。當處於TIME-WAIT狀態的串連數過多時,可能會影響到網路效能。因此Alibaba Cloud Linux提供了可修改TIME-WAIT逾時時間的介面,用於在特定情境提高網路效能。例如,高並發業務情境。該介面的取值範圍為[1, 600],單位為秒。
注意事項
TCP/IP協議TIME-WAIT狀態期間修改為小於60秒與TCP/IP協議quiet time概念相違背,可能導致您的系統將舊資料當做新資料接收,或者複製的新資料當做舊資料拒絕。因此請在網路專家建議下調整。瞭解TCP/IP協議quiet time的相關概念,請參見IETF RFC 793標準。
配置方法
您可以通過以下三種方式修改TIME-WAIT逾時時間,其中參數[$TIME_VALUE]為您修改的TIME-WAIT逾時時間。
修改參數[$TIME_VALUE]可能會存在業務不可用風險,可能導致業務中斷,建議您在非業務高峰期時執行該操作。
通過
sysctl
命令修改TIME-WAIT逾時時間。該方法即時生效,無法持久化。sudo sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]"
通過
echo
命令將值修改到/proc/sys/net/ipv4/tcp_tw_timeout
介面中。該方法即時生效,無法持久化。sudo sh -c "echo [$TIME_VALUE] > /proc/sys/net/ipv4/tcp_tw_timeout"
通過編輯
/etc/sysctl.conf
檔案修改net.ipv4.tcp_tw_timeout
參數。該方法即時生效,且修改可以持久化。這意味著一旦系統重啟,所做的修改仍然保留。具體操作步驟如下:執行以下命令,開啟 sysctl.conf 檔案。
sudo vim /etc/sysctl.conf
按 i 鍵進入編輯模式。在檔案末尾添加或修改對應的行。
net.ipv4.tcp_tw_timeout = [$TIME_VALUE]
按
Esc
鍵,輸入:wq
後按Enter
鍵,儲存配置。執行以下命令,使配置生效。
sudo sysctl -p
執行以下命令,查看tcp_tw_timeout(TIME_WAIT狀態的逾時時間)的當前值。
sysctl net.ipv4.tcp_tw_timeout
您可以通過運行netstat -ant | grep TIME_WAIT | wc -l命令判斷伺服器中是否存在大量短串連。
例如,在Nginx配置7層代理等存在大量短串連的情境下,阿里雲推薦您將[$TIME_VALUE]值設定為5,代表TIME-WAIT逾時時間被修改為5s。