文档

修改TCP TIME-WAIT超时时间以提升网络性能

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

在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参数。该方法即时生效,且修改可以持久化。这意味着一旦系统重启,所做的修改仍然保留。具体操作步骤如下:

    1. 执行以下命令,打开 sysctl.conf 文件。

      sudo vim /etc/sysctl.conf
    2. 按 i 键进入编辑模式。在文件末尾添加或修改对应的行。

      net.ipv4.tcp_tw_timeout = [$TIME_VALUE]
    3. Esc 键,输入:wq后按Enter键,保存配置。

    4. 执行以下命令,使配置生效。

      sudo sysctl -p
    5. 执行以下命令,查看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。