当前位置: 首页 > 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.dtcms.com/a/13219.html

相关文章:

  • Web自动化中常用XPath定位方式
  • 图解C#高级教程(三):泛型
  • 检查jar冲突,查找存在相同class的jar
  • Java面试题之JVM面试题
  • 系统架构设计师论文《论SOA在企业集成架构设计中的应用》精选试读
  • 自己做个国庆75周年头像生成器
  • DRF实操——项目部署
  • 大模型增量训练--基于transformer制作一个大模型聊天机器人
  • ftdi_sio驱动学习笔记 8 - 增加MPSSE SPI
  • leetcode每日一题day14(24.9.24)——字符串最多的子序列
  • git commit -am 仅提交已修改文件
  • 【Golang】Go语言字符串处理库--strings
  • NAND Flash虚拟层坏块管理机制
  • 如何选择适合的AI训练数据集进行人工智能训练
  • 计算机基础知识
  • 数学建模研赛总结
  • 在 C++ std::set 中如何利用不同类型的值进行搜索?
  • 吐槽一次qiankun微前端的框架
  • 【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】
  • Nginx部署前端Vue项目的深度解析
  • 【计算机网络最全知识点问答】第二章 物理层
  • 828华为云征文|部署在线论坛网站 Flarum
  • 为了学习Python熬夜部署了Jupyter Notebook 6.x
  • 使用 Nexus 代理 Docker Hub 的配置指南
  • python爬虫初体验(三)——将网页数据导出csv和excel文件
  • Python快速上手爬虫的7大技巧
  • 回归预测 | Matlab基于SO-ESN蛇群算法优化回声状态网络多输入单输出回归预测
  • Python字符串基础和处理
  • CSS 效果:实现动态展示双箭头
  • fish-speech语音大模型本地部署