解决time_wait过多问题

如果系统日志报以下错误,说明tcp的time_wait状态较多
kernel: TCP: time wait bucket table overflow

处理方法是加大tcp_max_tw_buckets,千万不要听信网络谣言把net.ipv4.tcp_tw_recycle改成1

#vi /etc/sysctl.conf 优化系统tcp参数

net.nf_conntrack_max = 1000000

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
#timewait队列最大数量
net.ipv4.tcp_max_tw_buckets = 100000
#握手过程的ack重发次数从5到3
net.ipv4.tcp_synack_retries = 3
#缓存syn请求数量
net.ipv4.tcp_max_syn_backlog = 8192

执行sysctl -p生效

net.ipv4.tcp_tw_recycle不要设置为1

TCP有一种行为,可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存的时间戳,即视为无效,相应的数据包会被丢弃。
Linux是否启用这种行为取决于tcp_timestamps和tcp_tw_recycle,因为tcp_timestamps缺省就是开启的,所以当tcp_tw_recycle被开启后,实际上这种行为就被激活了。
NAT内的客户端的时间戳是不一致的,设置为1后会导致部分用户无法建立tcp连接

猜你喜欢

转载自blog.csdn.net/langouster/article/details/89842450