修改 TCP 的 TIME-WAIT 超时时间
在 Linux 的内核中,TCP/IP 协议的 TIME-WAIT 状态持续 60 秒且无法修改。但在某些场景下,例如 TCP 负载过高时,适当调小该值有助于提升网络性能。因此 Alibaba Cloud Linux 2 从内核版本 4.19.43-13.al7 开始,新增内核接口用于修改 TCP TIME-WAIT 超时时间。本文主要介绍该接口的使用方法。
背景信息
TCP/IP 协议的 TIME-WAIT 状态是指应用关闭用于通信的套接口(socket)之后,TCP/IP 协议栈保持 socket 处于打开状态。该状态默认持续 60 秒,用来保证完成服务器和客户端的数据传输。当处于 TIME-WAIT 状态的连接数过多时,可能会影响到网络性能。因此 Alibaba Cloud Linux 2 提供了可修改 TIME-WAIT 超时时间的接口,用于在特定场景提高网络性能。例如,高并发业务场景。该接口的取值范围为[1, 600],单位为秒。如果不修改该接口,TIME-WAIT 超时时间的默认值保持 60 秒不变。
注意事项
将 TCP TIME-WAIT 超时时间修改为小于 60 秒与 TCP/IP 协议 quiet time 概念相违背,可能导致您的系统将旧数据当做新数据接收,或者复制的新数据当做旧数据拒绝。因此请在网络专家建议下调整。了解 TCP/IP 协议 quiet time 的相关概念,请参见 IETF RFC 793 标准 。
配置方法
您可以通过以下两种方式修改 TIME-WAIT 超时时间,其中参数[$TIME_VALUE]为您修改的 TIME-WAIT 超时时间。
- 通过
sysctl
命令修改 TIME-WAIT 超时时间。
sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]"
- 以 root 权限使用
echo
命令,将值修改到
/proc/sys/net/ipv4/tcp_tw_timeout
接口中。
echo [$TIME_VALUE] > /proc/sys/net/ipv4/tcp_tw_timeout
例如,在 Nginx 配置 7 层代理等存在大量短连接的场景下,阿里云推荐您将 TIME-WAIT 超时时间修改为 5s。运行以下任一命令修改超时时间:
说明 服务器中是否存在大量短连接,您可以运行 netstat -ant | grep TIME_WAIT | wc -l
命令进行判断。
sysctl -w "net.ipv4.tcp_tw_timeout=5"
echo 5 > /proc/sys/net/ipv4/tcp_tw_timeout
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论