温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样解决web中出现大量TIME_WAIT问题

发布时间:2021-12-06 17:32:13 来源:亿速云 阅读:265 作者:柒染 栏目:云计算

今天就跟大家聊聊有关怎样解决web中出现大量TIME_WAIT问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

新增的一组Apache服务器上线以来,我用netstat -an命令发现服务器中有大量状态为TIME-WAIT的TCP连接,于是用/sbin/sysctl -a查看了一下Linux的各项内核参数,并翻阅有关资料,决定修改其中的两项参数,以达到减少TCP连接中TIME-WAIT sockets的目的。


  vi /etc/sysctl.conf

  编辑/etc/sysctl.conf文件,增加四行:

引用


   
   
   net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30

  说明:

  net.ipv4.tcp_syncookies = 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;

  net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

  net.ipv4.tcp_tw_recycle = 1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

      net.ipv4.tcp_fin_timeout = 30 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。


 

  再执行以下命令,让修改结果立即生效:

  /sbin/sysctl -p


 

  用以下语句看了一下服务器的TCP状态:

   
   
   netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

  返回结果如下:

  ESTABLISHED 1423

  FIN_WAIT1 1

  FIN_WAIT2 262

  SYN_SENT 1

  TIME_WAIT 962


 

  效果:处于TIME_WAIT状态的sockets从原来的10000多减少到1000左右。处于SYN_RECV等待处理状态的sockets为0,原来的为50~300。

下面附上TIME_WAIT状态的意义:


 

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连 接的端口

状态为TIME_WAIT


 

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态 呢?

有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?


 

主动关闭的一方在发送最后一个 ack 后

就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间

这个是TCP/IP必不可少的,也就是“解决”不了的。


 

也就是TCP/IP设计者本来是这么设计的

主要有两个原因

1。防止上一次连接中的包,迷路后重新出现,影响新连接

(经过2MSL,上一次连接中所有的重复包都会消失)

2。可靠的关闭TCP连接

在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发

fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以

主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的。  还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态。

看完上述内容,你们对怎样解决web中出现大量TIME_WAIT问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI