问题描述:
最近遇到了一个syn丢包的情况,当系统磁盘、网络、cpu都无压力的时候,系统莫名其妙出现“sync to listen sockets drop”问题;无论带宽是10M还是8G,都会出现这种这种情况。现象为:输入系统命令:netstat -s | grep LISTEN,会出现 syns to listen sockets dropped; 但是并没有times the listen queue of a socket overflowed;连接队列包括两种,一个是半连接队列(syn queue),一个是全连接队列(accept queue);根据上述描述,accept队列并没有溢出,而syn队报丢失有可能是syn队列溢出的原因,也可能是其他原因;"syns to listen sockets dropped"意思是:收到三次握手的ack包,因为各种原因导致创建socket的过程中被丢弃;
首先我们分析了一下netstat -s里面的数据,发现"passive connections rejected because of time stamp"的值和"syns to listen sockets dropped"相差不大,很多服务器他们的值都是相同的,这个让人感觉sync to listen sockets drop的原因有可能与时间戳有关;
我们检查了一下系统的配置:
or的keepalive设置为512个,总共40个cpu;系统级别的监听队列长度是65535,syn队列是26w;or的每个进程监听队列是20w;
我们的架构是上层是openresty,下层是我们的自研缓存软件;
syns to listen sockets dropped; 是由于在三次握手过程中创建socket失败,但是我们不知道是or或者cache软件作为客户端丢失syn包还是or或者cache软件作为服务器丢失syn包;于是我们做了一系列测试;
发现以下几点:
1. client(用户)访问or层,会导致or层作为服务器端的syn包丢失;
2. or作为客户端,访问cache软件时,or发出的syn包没有丢失;(or和cache软件是同一个机房);
3. cache软件作为服务器,接受到的syn包没有丢失;
4. cache软件作为客户端,发出去的syn包没有丢失(cache软件主要是给其他IDC发送http请求);
于是我们的重点是解决用户给or的syn包丢失的问题;
我们从网上查找原因,查到了最有可能的原因:
:因为2.6内核以上中tcp_timestamps默认是打开的,所以当打开 tcp_tw_recycle时会导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回 的SYN+ACK,推荐的解决方法是关闭tcp_tw_recycle,打开tcp_tw_reuse解决TIME-WAIT过多的问题。
我们将/proc/sys/net/ipv4/tcp_tw_recycle修改为0,drop情况就不发生了;
然后查看tw个数:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
下面我们总结一下:
tcp_tw_recycle 设置为 1 会开启系统对 TIME_WAIT 状态的 socket 的快速回收。开启这个功能,系统就会存下 TCP 连接的时间戳,当同一个 IP 地址过来的包的时间戳小于缓存的时间戳,系统就直接丢包,“回收”这个 socket。这个选项同样需要开启 tcp_timestamp 才生效。
开启这个功能是有很大风险的,服务器端会根据同一个 IP 发送过来的包的时间戳来判断是否丢包,而时间戳是根据发包的客户端的系统时间得来的,如果服务端收到的包是同一出口 IP 而系统时间不一样的两个客户端的包,就有可能会丢包,可能出现的情况就是一个局域网内有的客户端能连接服务端,有的不能。具体原因是客户端处于NAT模式下,出口ip可能是同一个ip,不同客户端的发送的时间戳可能乱序,服务器会检查相同ip地址发送来过的包的时间戳是不是小于缓存的时间戳,如果不是,直接丢掉;
有可能drop package的情况:(服务器端tcp_tw_recycle和tcp_timestamp都开启)
1.lvs处于NAT模式(咱们是DR);
2.客户端处于NAT模式;
3.IDC处于NAT模式;有人对国内的节点做了一个可视化分析,发现有2.61%的概率出口存在NAT的这种情况;
在服务器上最好打开tcp_tw_reuse,并且关闭tcp_tw_recycle。
tcp_tw_reuse和tcp_tw_recycle区别:
1. tw_reuse,tw_recycle 必须在客户端和服务端timestamps 开启时才管用(默认打开)
2. tw_reuse 只对客户端起作用,开启后客户端在1s内回收
3. tw_recycle 对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s 具体时间视网络状况。内网状况比tw_reuse 稍快,公网尤其移动网络大多要比tw_reuse 慢,优点就是能够回收服务端的TIME_WAIT数量;

缓存服务器syns to listen sockets drop导致创建socket失败相关推荐

  1. Windows Server 2016 服务器总是有暴力破解密码导致的审核失败

    最近看了一下公司服务器的日志,在安全里,总是有审核失败,特别烦人,尝试密码特别弱智,总是用Administrator做用户名,不停的变换密码,真的烦,用户里面根本就没有Administrator,早就 ...

  2. 【PostgreSQL的模板库存在连接导致创建数据库失败】

    众所周知,PostgreSQL里包含两个标准系统数据库,template0和template1. 创建数据库时,CREATE DATABASE通过拷贝一个已有数据库进行工作.默认情况下,它拷贝名为te ...

  3. ftp文件缓存服务器,ftp服务器上的缓存在哪

    ftp服务器上的缓存在哪 内容精选 换一换 添加节点时提示"添加节点失败,节点已存在",如图1所示.待添加节点的服务器上已安装系统性能分析或者添加过节点.如果待添加节点的服务器上已 ...

  4. 网站 服务器拒绝访问,缓存服务器拒绝访问 了解如何修复

    导语:缓存服务器是用于节省宽带和优化宽带性能的,创建一个好的缓存服务器它可以解决一个企业网站扩大而耗费昂贵的资金土重建的问题. 缓存服务器拒绝访问的原因是因为客户端的脚本不能使用源代码正常工作,下面来 ...

  5. nginx反向代理缓存服务器构建

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...

  6. 【squid缓存服务器】

    文章目录 一.Squid的简介 二.Squid工作模式 传统模式 透明模式 反向代理模式 三.Squid软件介绍 搭建Squid传统模式 搭建Squid透明模式 搭建Squid反向代理模式 四.Squ ...

  7. 缓存服务器 MemcachedRedis

    文章目录 一.前言 1.NoSQL的优点/缺点 2.关系型数据库与非关系型数据库的区别 (1)关系型数据库 (2)非关系型数据库 二.Memcached 1.特点 2.服务框架 3.配置安装Memca ...

  8. 【推荐】如何用 Nginx 构建反向代理缓存服务器?

    作者:一盏烛光,贤牛特邀工程师. 防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对 Internet 的连接请求(如×××/NAT), ...

  9. MemcachedRedis构建缓存服务器

    前言 许多Web应用都将数据保存到关系型数据库( RDBMS)中,应用服务器从中读取数据并在浏览器中显示.但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等 ...

最新文章

  1. tomcat配置文件server.xml具体解释
  2. 2021年春季学期-信号与系统-第六次作业参考答案-第十一小题
  3. 使用Base64加密URL
  4. usb接口电路_RS232接口与RS485的不同之处
  5. 泛型类 0104 c# 1613697523
  6. nginx ngx_http_index_module(默认初始页)
  7. java 自定义注解 生成json_Java中如何创建自定义的注解
  8. android多文件上传错误,在Android中上传大文件而不会出现内存错误
  9. 解决PD虚拟机下载ch341驱动 虚拟机学习单片机 MAC学习单片机
  10. Ubuntu中安装ns3
  11. 迅为S5P6818核心板ARM Cortex-A53架构三星八核处理器
  12. 请详细说下你对 vue 生命周期的理解?
  13. 百度搜索结果的URL参数 搜索框提示词搜索方式(rsv_sug2)
  14. 签名证书(.keystore)生成指南
  15. openGauss:(5)openGauss简介
  16. 遗传算法的特性以及在具体算法应用中的应用
  17. 【华人学者风采】毛景文 中国地质科学院
  18. (转)我奋斗了十八年不是为了和你一起喝杯咖啡
  19. 浙江大学计算机系81级同学会,无线电系64级校友毕业50周年聚会
  20. codevs 3061 质子撞击炮②

热门文章

  1. 研究人员利用脑机接口可以直接预测我们的偏好
  2. JAVA实现旋转数组的最小数字问题(《剑指offer》)
  3. 这套监控系统让打工人颤抖:离职倾向、摸鱼通通都能被监测,争议出现后产品页面已404...
  4. 最新电子皮肤的触觉有多灵?连空气流动都能感受到
  5. 万万没想到,钉钉居然是个AI平台
  6. 拯救“没常识”的GPT-3得靠它了,交大ACM班校友提出“Voken” 无监督学习 | EMNLP 2020...
  7. 全球首款碳纳米管通用计算芯片问世!RISC-V架构,5倍于摩尔定律,Nature连发三文推荐...
  8. 国产AI框架再进化!百度Paddle Lite发布:率先支持华为NPU在线编译,全新架构更多硬件支持...
  9. RocketMQ(六):namesrv再探
  10. 一些很基本的小知识点,这篇作为持续更新用的