当前位置: 首页 > news >正文

Linux-TCP重传

问题描述:

应用系统进行切换,包含业务流量切换(即TongWeb主备切换)和MYSQL数据库主备切换。首先进行流量切换,然后进行数据库主备切换。切换后发现备机TongWeb上有两批次慢请求,第一批慢请求响应时间在133秒左右,第二批次在966秒左右。

慢请求原因:

第一批慢请求原因:数据库主备切换时DNS还未就绪,此时又需要新建数据库连接,连接创建在旧主库上,由于旧主库已无法使用,所以从TCP上看连接状态一直处于SYN_SENT状态。因为连不上数据库,根据tcp_syn_retries参数设置,会不断地向数据库重传数据,直到达到阈值放弃连接。然后会重新建连,连接到新的主库,从而将业务执行完毕。此处耗时在于TCP重传,重传时间见参数tcp_syn_retries说明。

第二批慢请求原因:数据库主备切换时,此时业务已经从连接池中获取了连接并进行了数据库操作,这个时候数据库又无法使用,从TCP上看连接状态是ESTABLISHED状态。因为连不上数据库,根据tcp_retries2参数设置,会不断地向数据库重传数据,直到达到阈值放弃连接。然后会重新建连,连接到新的主库,从而将业务执行完毕。此处耗时在于TCP重传,重传时间见参数tcp_retries2说明。

根据MYSQL代码说明,在代码中捕获SQLException,当检测到特定的断开错误码(如2006或2013)时,尝试重新连接。

2006:MySQL服务器正在运行,但是客户端无法连接到服务器。

2013:客户端在等待来自服务器的响应时超时。

TCP重传参数:

1、net.ipv4.tcp_syn_retries

该参数默认值为6。主机作为客户端,对外发起TCP连接时,即三次握手的第一步,内核发送SYN报文的重试次数,超过这个次数后放弃连接。

通常,第一次超时重传是在1秒后,第二次超时重传是在2秒,第三次超时重传是在4秒后,第四次超时重传是在8秒后,每次超时的时间是上一次的2倍,最后一次重传后会继续等待上一次的2倍

2、net.ipv4.tcp_synack_retries

该参数默认值为5。主机作为服务端,接受TCP连接时,在三次握手的第二步,向客户端发送SYN+ACK报文的重试次数,超过这个次数后放弃连接。

与客户端重传SYN类似,它的重传会经历1、2、4、8、16秒,最后一次重传后会继续等待32秒,如果服务端仍然没有收到ACK,才会关闭连接,故共需要等待63秒。

3、net.ipv4.tcp_retries1

该参数用于设置TCP连接中数据包轻量级重试的次数,默认值通常为3。

当TCP向接收方发送数据包时,它会等待接收方确认已经收到数据包。如果在一定时间内没有收到确认(ACK),TCP将尝试重新发送数据包。该参数指定了在将连接视为有问题之前,TCP应该重试发送未确认数据包的次数。

4、net.ipv4.tcp_retries2

该参数用于设置TCP连接中数据包的最大重试次数,默认值通常为15。

在TCP通信过程中,发送方会等待接收方确认已收到数据包。如果在一定时间内没有收到确认(ACK),发送方会尝试重新发送数据包。在经过一定次数的轻量级重试之后(由net.ipv4.tcp_retries1参数指定),连接可能被认为存在问题。

在认为连接有问题之后,TCP将尝试再进行15次重试,然后放弃并关闭连接。这些重试次数包括了net.ipv4.tcp_retries1参数定义的轻量级重试次数。

http://www.lryc.cn/news/446474.html

相关文章:

  • Python通过Sqlalchemy框架实现增删改查
  • windows C++ - 任务计划程序(并发运行时)
  • 多米诺骨牌(模拟)
  • Unity DOTS系列之Struct Change核心机制分析
  • 「数组」定长滑动窗口|不定长滑动窗口 / LeetCode 2461|2958(C++)
  • 【华为】用策略路由解决双出口运营商问题
  • 第L2周:机器学习|线性回归模型 LinearRegression:1. 简单线性回归模型
  • 1.5 测试用例
  • P1101 单词方阵
  • 通过 OBD Demo 体验 OceanBase 4.3 社区版
  • 浅拷贝和深拷贝(Java 与 JavaScript)
  • 力扣每日一题 2306.公司命名
  • HTML-DOM模型
  • vue项目报错: At least one is required in a single file component.的主要原因及解决办法
  • 03DSP学习-利用syscfg配置IO
  • web - RequestResponse
  • 个人文章汇总
  • Java | Leetcode Java题解之第436题寻找右区间
  • 大模型智能体在金融公告理解领域的应用 | OPENAIGC开发者大赛高校组AI创新之星奖
  • 链表入门(LeetCode题目)
  • kibana开启访问登录认证
  • Java 14Java 15新特性概述
  • 流量特征随机ua修改
  • CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3)
  • 如何在 Rust 中通过 Rumqttc 实现 MQTT 通信
  • 广东高校建设AIGC实验室时需要注意哪几个关键点?
  • 设计模式-PIMPL 模式
  • Docker部署MongoDB教程
  • 堆排序易错点
  • 安卓13长按电源按键直接关机 andriod13不显示关机对话框直接关机