侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

大量TIME_WAIT连接应对办法

2023-10-01 星期日 / 0 评论 / 0 点赞 / 45 阅读 / 2842 字

centos上用nginx+php搭建的web服务器突然有报警有大量TIME_WAIT连接(5000+) 查看TCP状态数量 netstat -n | awk '/^tcp/ {++S[$NF]} E

centos上用nginx+php搭建的web服务器突然有报警有大量TIME_WAIT连接(5000+)
查看TCP状态数量
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
按IP连接数排行
netstat -anpt |grep TIME_WAIT |awk '{print $5}' |awk -F: '{print $1}' |sort |uniq -c |sort -rn

发现没有异常IP,网上查看说是要将/etc/sysctl.conf里的tcp_tw_recycle,tcp_tw_reuse置为1,可是本机就是这样设置的。。
tcp_tw_reuse:这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接

tcp_keepalive_time:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。
tcp_max_syn_backlog:这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求
tcp_syncookies:该参数与性能无关,用于解决TCP的SYN攻击

再查看/var/log/messages有大量日志
kernel: TCP: time wait bucket table overflow
kernel: TCP: time wait bucket table overflow

如是查看/etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 5000
这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,默认是180000,5000显然太小,修改为20000保存,sysctl -p生效却发现提示
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key

以上3个选项阻止桥接流量获得通过主机iptables规则,Netfilter是默认情况下启用了桥梁,如果不阻止会导致严重的混乱

解决方法:运行命令modprobe bridge 后  sysctl -p没出错了

大量TIME_WAIT连接仍然没解决啊:
找到一篇帖子:
http://www.cnblogs.com/billyxp/archive/2014/04/28/3683559.html

结论是
1、开启tcp_timestamp是开启tcp_tw_recycle,tcp_tw_reuse和tcp_timestamp的前提条件。tw_reuse 只对客户端起作用,开启后客户端在1s内回收;tw_recycle 对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s 具体时间视网络状况。
2、但是在nat模式下,不用将tcp_tw_recycle和tcp_timestamp同时开启,这会造成tcp超时引发故障,开启tcp_timestamp即可。

如是将tcp_timestamp设置为1,不一会儿,tcp连接都自动回收了,小记。

广告 广告

评论区