• redis的tcp-backlog配置


      有客户报障,说是连接超时。。。然后查看docker里有队列溢出

    netstat -s | grep overflowed

      通过抓取队列溢出的大小,发现每次报障时,实例的队列溢出数都会突增。

      队列溢出是查看现有连接数是否大于backlog,如果大于就丢弃,并overflow数+1,backlog数是有配置的backlog和系统的somaxconn决定的,backlog值取min(somaxconn,backlog)。

      1.redis的配置文件有tcp-backlog,默认的是511

        tcp服务里面默认有两个队列,一个是tcp-backlog,用于存放未连接队列,另外一个是somaxconn,用于存放已连接队列。

        在完成tcp三次握手之前,首先进入未连接队列,完成tcp三次握手之后正式建立连接,进入已连接队列。因为redis是单进程的,如果主进程出现慢查询的话,会导致已连接队列堆满,并且新accept的连接不能被处理,不能进入到已连接队列,也导致未连接队列堆满,在服务器看到处于未连接队列中的连接状态为SYN_RECV。 新进来的客户端连接将会一直处于SYN_SENT状态等待服务器的ACK应答,最终导致连接超时。

        关于TCP三次握手

      1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
      2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

        处理方法:将配置tcp-backlog设和系统somaxconn设置成8192

        

  • 相关阅读:
    Jupyter-notebook安装问题及解决
    [模块] scrapy_splash(迁移)
    pychram-redis破解
    scrapy-redis(迁移)
    123
    day44作业
    sql 的基本数据类型
    基本数据库操作
    安装数据库与配置使用环境
    线程知识点——Event事件
  • 原文地址:https://www.cnblogs.com/chenyang920/p/13532705.html
Copyright © 2020-2023  润新知