• 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,
    • 应用层面尽量避免频繁关闭连接,如业务优化,或者使用长连接等;
  • 相关阅读:
    找到一种给vs2012对话框插入背景图片不会失真的方法
    第一次用C语言把数据写入文件中
    Java学习路线图
    一:MyBatis Generator 【SpringMvc+Spring+MyBatis+Maven整合学习笔记】
    windows系统安装Redis
    js子级窗口相互调用父级的方法
    MSSQL 发布订阅,实现读写分离
    查看MS SQL最耗时间资源的SQL
    数据库优化
    mybatis与hibernate区别
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/14828056.html
Copyright © 2020-2023  润新知