本文主要介绍如何在Linux操作系统中,修改net.ipv4.tcp_max_tw_buckets
参数的大小。
该参数用于控制系统中同时保持TIME_WAIT
状态的socket连接最大数量,该值在默认情况下,大小为总内存(MB)*4。当实例中处于TIME_WAIT
状态的连接数量超过最大数量时,内核将会关闭超出部分的TCP连接,并在/var/log/messages日志中提示告警信息TCP: time wait bucket table overflow
。
由于不同业务场景TCP连接数量不同,为避免资源浪费、业务受到影响,您可以按实际业务场景调整net.ipv4.tcp_max_tw_buckets
参数值。
TIME_WAIT
状态的TCP连接时,您可以尝试增大本参数值。TIME_WAIT
状态的TCP连接数量异常多,导致系统执行缓慢,服务卡顿,甚至业务中断,您可以尝试减小本参数值。在目标Linux实例中执行如下命令,查看系统当前配置的可同时处于TIME_WAIT
状态TCP连接最大数量。
cat /proc/sys/net/ipv4/tcp_max_tw_buckets
回显示例如下,表示当前最大可同时存在5000
个处于TIME_WAIT
状态TCP连接。
在目标Linux实例中执行如下命令,查询Linux随机分配端口的范围。
说明
Linux对外的随机分配端口理论最大值为65535
,排除保留、被占用端口外,可用值约为60000
,因此设置tcp_max_tw_buckets
参数值的大小不应大于该范围值。
cat /proc/sys/net/ipv4/ip_local_port_range
回显示例如下,表示端口可用区间为[32768,60999]
,net.ipv4.tcp_max_tw_buckets
参数配置可配置的理论最大值为 60999 - 32768 + 1 = 28238
。
说明
20000
,替换为您期望的可同时处于TIME_WAIT
状态TCP连接最大数量。net.ipv4.tcp_max_tw_buckets
参数值。echo 20000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
cat /proc/sys/net/ipv4/tcp_max_tw_buckets
说明
20000
,替换为您期望的可同时处于TIME_WAIT
状态TCP连接最大数量。vim /etc/sysctl.conf
i
键进入编辑模式。net.ipv4.tcp_max_tw_buckets
参数值。esc
键,输入:wq
保存并退出文件。sysctl -p