本文介绍Linux系统的ECS实例的/var/log/messages中,出现大量“TCP: time wait bucket table overflow”错误的原因和解决方案。
问题现象
Linux系统的ECS实例的/var/log/messages中,出现大量“TCP: time wait bucket table overflow”错误。
问题原因
出现该问题的原因是ECS实例中tcp的连接数太多,超出了net.ipv4.tcp_max_tw_buckets内核参数定义的值。
tcp_max_tw_buckets:表示系统同时保持TIME_WAIT状态的Sockets最大数量,如果超过这个数字,TIME_WAIT状态的Socket会被结束并且提示告警信息。
net.ipv4.tcp_max_tw_buckets:设置该参数,是为了抵御简单的DDoS攻击。若非业务需要,请不要降低此限制,如果网络条件需要比默认值高,将net.ipv4.tcp_max_tw_buckets参数的值调高或者增加内存。
解决方案
您可以调高net.ipv4.tcp_max_tw_buckets的值以解决此问题。
远程连接ECS实例。
具体操作,请参见连接方式概述。
调整
net.ipv4.tcp_max_tw_buckets
参数值。执行以下命令,编辑
sysctl.conf
文件。vim /etc/sysctl.conf
按
i
键进入编辑模式。根据业务需要,将
net.ipv4.tcp_max_tw_buckets
参数的值调高。如下所示,将
net.ipv4.tcp_max_tw_buckets
值设置为20000。net.ipv4.tcp_max_tw_buckets = 20000
按
Esc
键,输入:wq
保存退出。执行以下命令,使配置生效。
sysctl -p
执行以下命令,可查看不同连接数的状态。
netstat -an | grep 80 | awk '{print $6}' | sort | uniq -c | sort -rn
文档内容是否对您有帮助?