文档章节

大量TIME_WAIT连接应对办法

hiwill
 hiwill
发布于 2017/07/22 21:02
字数 599
阅读 55
收藏 0

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连接都自动回收了,小记。

© 著作权归作者所有

共有 人打赏支持
hiwill
粉丝 12
博文 126
码字总数 82589
作品 0
朝阳
私信 提问
当心!TCP本机客户端连接本机服务器

上周,在我们进行性能测试的时候,发现了一个问题。 我们的服务器上启了一个redis服务端,侦听0.0.0.0的1234端口,同处在本机的另外一个进程会频繁发起到该服务端的短连接,结果导致了两个问...

dog250
2015/09/27
0
0
close_wait状态和time_wait状态 (TCP连接)

不久前,我的Socket Client程序遇到了一个非常尴尬的错误。它本来应该在一个socket长连接上持续不断地向服务器发送数据,如果socket连接断开,那么程序会自动不断地重试建立连接。 有一天发现...

小报童
2013/12/23
0
0
TIME_WAIT和CLOSE_WAIT过多

转自大神(致敬):https://blog.csdn.net/shootyou/article/details/6622226 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/d...

sailikung
2018/08/25
0
0
服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有...

八戒_o
2016/02/04
220
0
linux和windows下TIME_WAIT过多的解决办法

如果使用了nginx代理,那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx 和后端的ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在...

红薯
2009/06/09
7.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

Map的遍历方式

import java.util.*; public class a_21 { public static void main(String[] args) { Map<Integer,Integer> map= new HashMap<Integer, Integer>(); for(int i=0;i<6;i++) ......

南桥北木
29分钟前
0
0
总结:线程间频繁切换为什么耗费资源?

因为线程切换的时候,CPU需要将此线程的所有执行状态保存起来,如线程编号,执行到的位置等,然后再去执行其它线程。

浮躁的码农
今天
3
0
PHP版本高于5.5时,curl文件上传必须使用CurlFile对象

坑了我一天,之前@的方法各种上传不成功文件。都怀疑服务端有bug了。

叫我哀木涕
今天
1
0
js算法总结

数列求和 等差数列求和 function sum(a0,d,n){//a0->首项,d->公差,n->项数//(首项+末项)*项数/2return (a0+(a0+(n-1)*d))*n/2;} 等比数列求和 function sum(a0,q,n){//a0->首项,q......

祖达
今天
4
0
小白?转型?毕业生?外行学习快速入行大数据开发指南

这篇文章中,本文将针对三种不同的、想要进入数据科学领域的人群,给出自己的经验,帮助他们迅速有效入行。 虽然没有适合每个人的万能解决方案,但这三类建议值得想转行的你一看。 第1类:新...

董黎明
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部