系统日志"TCP: time wait bucket table overflow"分析
系统kern
日志不断重复输出:
系统日志中如果有大量的kernel: : TCP: time wait bucket table overflow
,则表明系统连接中有很多TIME_WAIT
状态,一种可能是受到了DDOS攻击(如果连接是从大量IP访问,并且出现大量的SYN
状态)。
__ratelimit: 133 callbacks suppressed
日志原因参考 __ratelimit解释
参考 kernel: TCP: time wait bucket table overflow 解决方法 来看看系统有多少连接
显示输出
检查tcp_max_tw_buckets
输出显示
原来设置值还是相对较大的。我检查了用户的/etc/sysctl.conf
看到如下设置
并且/etc/sysctl.conf
修改时间戳是Mar 9 18:23
,检查/var/log/kern
日志中这个报错日志最后出现时间就是这个时间戳之后
说明用户已经发现了这个问题,并通过扩大TIME_WAIT
bucket table解决了这个问题。
不过,为何会导致出现大量的TIME_WAIT
呢?
参考 Too many TIME_WAIT connections inside container: time wait bucket table overflow
TCP: time wait bucket table overflow
日志表明TCP sockets的TIME_WAIT
状态,即TW buckets已经达到了内核中分配的内存上限。
可以通过以下命令检查TIME_WAIT
数量
可以通过以下命令检查 max_tw_buckets
设置
这个内核参数 tcp_max_tw_buckets
在 proc
中是 /proc/sys/net/ipv4/tcp_max_tw_buckets
,是一个全局设置。对于OpenVZ
这样的容器虚拟化,还有一个针对每个容器设置的/proc/sys/net/ipv4/tcp_max_tw_buckets_ub
是针对每个容器的。
参考
Last updated