在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。