Linux-TCP重传

news/2024/9/25 15:27:30/

问题描述:

应用系统进行切换,包含业务流量切换(即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.ppmy.cn/news/1530340.html

相关文章

鸿蒙 OS 开发零基础快速入门教程

视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…

物联网迎来下半场,国产 IoTOS 打造企业级智能硬件云服务平台

如有需求,文末联系小编 氦氪云 IoTOS 是一套先进的企业级物联网解决方案平台,为万物互联提供可靠安全稳定的终端接入、协议适配、消息路由、数据存储和分析、应用使能等核心功能。面向物联网领域中的终端设备商、系统集成商、应用服务商、能力提供商等&a…

使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息

要使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息,你可以按以下步骤来实现: 目录 1. 前端 (React Material-UI) 2. 后端 (Spring Boot MyBatis MySQL) 3. 模拟实时位置数据 4. 前后端联调 1. 前端 (React Mat…

PHP API 框架:构建高效API的利器【电商API接口】

在当今快速发展的互联网时代,API(应用程序编程接口)已成为连接不同应用程序和服务的关键。PHP,作为一种流行的服务器端脚本语言,提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性,以及…

mysqli_fetch_object() 和 mysqli_fetch_array() 函数的区别

mysqli_fetch_object() mysqli_fetch_object() 函数用于从结果集中取得一行作为对象返回。这个对象反映了数据库表中的一行,其中对象的属性对应着表的列名。这个函数对于面向对象编程(OOP)的 PHP 开发者来说非常方便,因为它允许你…

TikTok直播推流不精准该怎么办?跟IP有关系吗?

TikTok,这款风靡全球的短视频社交平台,其直播功能已成为众多创作者与品牌宣传的利器。然而,不少用户却遭遇了直播推流不精准的难题,这直接影响到直播的曝光和互动效果。那么,面对这一问题,我们该如何应对&a…

vue配置axios

axios 是一个基于 Promise 的 HTTP 客户端,适用于浏览器和 node.js 环境。它提供了易于使用的 API 来发送异步 HTTP 请求到 REST 端点并处理响应。axios 因其简洁的 API 和广泛的浏览器兼容性而广受欢迎。 步骤一: 下载axios 在打开vue项目的编辑器中打…

Vue ElemetUI table实现双击修改编辑某个内容

1、使用cell-dblclick事件&#xff0c;当双击时触发事件 <el-table cell-dblclick"handleCellDblClick" 2、单元格设置 主要重点为判断双击时切换input框&#xff0c;然后绑定ref&#xff0c;设置失去焦点时触发点方法&#xff0c;与按enter键触发点方法 <…