zoukankan      html  css  js  c++  java
  • 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

        

  • 相关阅读:
    TP5之自定义分页样式
    使用ajax方法实现form表单的提交
    H5页面唤起手机拨打电话(拨号)
    php开启openssl扩展
    tp5 加载 extend 类库的方法 (有命名空间和没有命名空间的调用)【转】
    PHP 返回13位时间戳
    thinkphp5 view_path 配置,进行模板分离
    html2canvas 截图不完整 图片缺失问题
    PHP把JSON转换成数组
    tp5怎么隐藏默认模块名啊
  • 原文地址:https://www.cnblogs.com/chenyang920/p/13532705.html
Copyright © 2011-2022 走看看