tcp_tw_recycle参数引发的数据库连接异常
【问题描述】
开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:
其一:连接超时
131148.00ms Tomcat Connection Pool
其二:连接耗时过长
DAL.getConnectionCost 64018ms
【问题分析】
通过监控数据汇总,出现此异常问题来自应用群集中的多台WEB服务器,没有规律性,数据库服务器也没有做过系统版本升级及硬件调整,且数据库各主要性能指标正常,负载很低。因此最大可疑是网络通讯上的异常导致,于是通过客户端/服务器端同时抓包进行分析。
分析后,发现数据包中有许多TCP Retransmission
六次重连失败样例:

五次重连失败,第六次连接成功样例:

TCP SYN重传次数与请求端的tcp_syn_retries参数值有关,本案例中应用WEB服务器设置为6(查看命令:sudo sysctl -a | grep tcp_syn_retries),即重试的间隔时间从1s开始每次都翻倍,6次的重试时间间隔为1s, 2s, 4s, 8s,16s,32S总共63s,第6次发出后还要等64s才知道第6次也超时了,所以总共需要 1s + 2s + 4s+ 8s+ 16s + 32s+64S =127S,TCP才会断开连接。
因此上述问题描述中
“连接超时”计算公式为:1s + 2s + 4s+ 8s+ 16s + 32s+64S =127S
“建连耗时”计算公式与实际重试次数有关,以5次重试为例:1s + 2s + 4s+ 8s+ 16s + 32s=63S
查询资料得知TCP Retransmission问题很大可能与tcp_tw_recycle设置有关,在此参数开启后,服务端会对TCP包中timestamp有效性进行校验,数据包中的timestamp理应是顺序递增,如最新的数据包timestamp小于前一个包的timestamp,服务端则认为最新的数据包已过时从而丢弃,此问题常出现在NAT网络,如负载均衡设备后面,因为数据包经过转发,source_ip相同,但是后端不同机器的timestamp不同。
检查数据库服务器配置,发现tcp_tw_recycle功能被开启,同时网卡统计中存在因为时间戳被拒的数据包信息
netstat -s |grep reject
251286 passive connections rejected because of time stamp
795 packets rejects in established connections because of timestamp
关闭tcp_tw_recycle功能后,应用连接数据库恢复正常。本案例中为何数据库服务器重启后应用报错,那是因为参数先前只是做了动态关闭,没有修改配置文件固化,重启后读到旧的配置从而导致应用突然报错。
【问题重现】
本案例中的应用服务器与后端数据库直连,并不在NAT网络中,那理论上特定机器发送给DB的TCP包中timestamp数值是递增,不会出现乱序丢包问题,但实际抓包中的timestamp是乱序的,忽大忽小,没有规律性。
在不同Kernel版本环境中模拟用户请求,发现在不同内核环境中,timestamp行为有明显差异
Kernel 4.10.13,TSecr(请求方timestamp)随机

Kernel 3.10,TSecr(请求方timestamp)递增

查询资料发现timestamp生成算法在linux kernel 4.10之后进行了调整,加入偏移因子,从而变为随机性。因此如开启了tcp_tw_recycle,即使在非NAT网络环境中也会出现丢包问题,tcp_tw_recycle的弊端更为突显,因此在4.12内核中被移除
【结论】
tcp_tw_recycle在高版本内核中弊大于利,应保持系统默认设置,关闭参数。
【参考资料】
https://mp.weixin.qq.com/s/uwykopNnkcRL5JXTVufyBw
http://80x86.io/post/linux-kernel-v4.10.1-tcp-timestamps-random-offset-problem
tcp_tw_recycle参数引发的数据库连接异常的更多相关文章
- 【经验总结】tcp_tw_recycle参数引发的故障
tcp_tw_recycle参数引发的故障 By Eric 故障描述: 2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情 ...
- tcp_tw_recycle参数引发的故障
文章转载自:https://blog.csdn.net/wireless_tech/article/details/6405755 故障描述: 2010年9月7日,新上线的手机游戏论坛有部分地区用户反 ...
- tcp_tw_recycle参数引发的系统问题
文章转载自: https://blog.csdn.net/zhuyiquan/article/details/68925707
- mysql数据库连接异常问题(总结)
mysql数据库连接异常问题(总结) 1.1 前言 最近项目由1个数据源增加至了3个数据源(连接池使用C3P0),结果各种奇葩的数据库连接问题接踵而至,为防止将来再次遇到同样的问题不犯同样错误,现 ...
- 网络优化之net.ipv4.tcp_tw_recycle参数
不要在linux上启用net.ipv4.tcp_tw_recycle参数 2015/07/27 CFC4N 本文为翻译英文BLOG<Coping with the TCP TIME-WAIT ...
- 不要在linux上启用net.ipv4.tcp_tw_recycle参数
不要在linux上启用net.ipv4.tcp_tw_recycle参数 发布于 2015/07/27 莿鸟栖草堂 本文为翻译英文BLOG<Coping with the TCP TIME-WA ...
- 【MySql】数据库连接异常:Thelastpacketsentsuccessfullytotheserverwas0millisecondsago
参考链接:http://blog.sina.com.cn/s/blog_7540bf5f0102xjpk.html 最近新入职,用了新版的mysql8数据库,结果连接数据库时出现了问题,报了几个异常, ...
- TR2021_0000偶发数据库连接异常问题排查
[问题描述] 数据库连接异常是很难排查的一类问题.因为它牵涉到应用端,网络层和服务器端.任何一个组件异常,都会导致数据库连接失败.开发遇到数据库连接不上的问题,都会第一时间找DBA来协助查看,DBA除 ...
- 一个purge参数引发的惨案——从线上hbase数据被删事故说起
在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司误用puppet参数引发的事故,而且这个参数我也曾被“坑过”. ...
随机推荐
- 【洛谷P4148】简单题(kd-tree)
传送门 题意: 给出一个\(n*n\)的棋盘,现在有两种操作:一种是某个格子里的数字加上\(A\),另一种是询问矩阵和. 空间限制:\(20MB\),强制在线. 思路: 直接\(kd-tree\)来搞 ...
- c# 第32节 类的继承
本节内容: 1:为什么要继承 2:继承特点 3:继承的实现 4:子类传统构造,与base构造 1:为什么要继承 2:继承特点 什么是继承: 继承就是子类包含父类的数据结构和行为方式, 包括字段.属性. ...
- 清空txt文件
如果想在每次写入前清空txt文件里面的内容,不必删掉文件,只需要使用truncate方法就行了,代码 0x01:以读/写的方式打开文件: f = open("read_test.txt&qu ...
- ubuntu下的mv命令
移动文件 代码: mv file1 dir1 #因为dir1目录是存在的,可以不加 / 直接放入 mv file1 dir1/ #把temp文件移动到myfiles目录中 移动目录 代码: mv di ...
- Vue 使用数组和对象控制Class
直接上代码: <!doctype html> <html lang="en"> <head> <meta charset="UT ...
- 【正则】day02
正则表达式的应用匹配.查找.分割.替换对于普通字符串处理函数和正则表达式字符处理函数,使用的原则:能用普通字符串处理函数处理的,就不要用正则表达式处理. 原因:普通字符串处理函数:效率高.简单.正则表 ...
- ASP.NET开发实战——(十二)ASP.NET MVC 与数据库之Entity Framework Migrations
在开发数据库应用程序的时候,经常会遇到某些表需要添加字段或者修改类型.新增表等需求,而对于EF Code First来说关注的只有实体类,当需求变更时只需要添加新的实体类或者在实体类中添加.删除.修改 ...
- Physically Based Shader Development for Unity 2017 Develop Custom Lighting Systems (Claudia Doppioslash 著)
http://www.doppioslash.com/ https://github.com/Apress/physically-based-shader-dev-for-unity-2017 Par ...
- Unity 2018 Cookbook (Matt Smith 著)
1. Displaying Data with Core UI Elements (已看) 2. Responding to User Events for Interactive UIs (已看) ...
- springboot2.0 management.security.enabled无效
在1.5.x版本中通过management.security.enabled=false来暴露所有端点 在使用springcloud的时候,如果基于springboot2的版本的配置中心,无法使用SV ...