本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
在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。