TIME_WAIT 状态过多怎么办?

这道题目是腾讯考察的题目,当时没有回答上来,这也是面试过程中的一道经典题目,结合网上的一些博客,做一个记录,好以后复习。
TIME_WAIT 状态过多怎么办?
上图是四次挥手的示意图,左边表示active close, 右边表示passive close, 当然active close 不一定就表示客户端,passive close 一定就表示服务端。

time_wait 的危害

  • 如果服务端有大量的close-wait的连接没有及时关闭,而在高并发短连接的HTTP请求下,客户端又不断地发送新的连接请求,这样就会打开的文件描述符数会不断增加。在linux系统中,一个进程最大可以同时打开的文件描述符是有上限的,ulimit命令可以查到。当达到这个上限时,服务端进程将无法新建socket来响应新的请求。
  • 过多的话会占用内存,一个TIME_WAIT占用4k大小

解决方案

编辑内核文件/etc/sysctl.conf,加入以下内容:

  • net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;打开这个syncookies的目的实际上是:“在服务器资源(并非单指端口资源,拒绝服务有很多种资源不足的情况)不足的情况下,尽量不要拒绝TCP的syn(连接)请求,尽量把syn请求缓存起来,留着过会儿有能力的时候处理这些TCP的连接请求”。
  • 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 修改系默认的 TIMEOUT 时间
  • 客户端,HTTP 请求的头部,connection 设置为 keep-alive,
  • 应用层面尽量避免频繁关闭连接,如业务优化,或者使用长连接等;

原文链接: https://www.cnblogs.com/wsl-hitsz/p/14828056.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    TIME_WAIT 状态过多怎么办?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397301

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月10日 上午9:28
下一篇 2023年4月10日 上午9:28

相关推荐