linux socket资源耗尽,TCP的socket资源被耗尽的问题

c4468b3f4df77e96b0a416fa2a870fba.png

一、 故障现象

部分机顶盒用户出现大面积登录APP时,界面停留在登陆页面,无反应。

二、现象初步分析

本次问题出现时,所有AAA出现了异常流量波动,在AAA异常流量段期间接到用户故障报障。此时主要表现在LVS集群显示真实的EPG 服务器不停的被踢出集群和加入(UP/DOWN),导致了用户调度到EPG后出现了异常显示。

AAA异常流量图

04b33d64b788722b4afb8630666fa366.png

三、问题排查过程

接到故障后第一时间对AAA/EPG后台日志进行了查看,发现用户接入认证和响应都正常,观察到EPG 的LVS集群中有服务器的inactive连接数异常并且随机出现不同EPG服务器被踢出和加入集群,随后对EPG 的LVS集群的状态进行了跟踪和抓包分析,为了快速恢复业务随后重启了EPG tomcat并进行了LVS的主备切换,业务故障恢复。

四、诊断分析结果

出现故障时通过LVS的日志可以看到5台EPG服务器在轮询的出现连接失败和连接成功的情况,也就是一台OK后,另一台出现连接失败,如此反复的表现在5台EPG服务器上

fd3590989c752655c6eb4be0b0feb969.png

此时被UP/DOWN的EPG会出现大量的inactive

fe9daf8ea14a7ff632e0665f7b3188b4.png

此时对集群出现UP/DOWM的服务器进行抓包,发现客户端发出了SYN报

文,但是EPG服务器没有响应,并且响应报文发不出去不停的retransmission。

167246a7c083d86f2d557ef915d8c9f2.png

进一步查看该EPG的资源消耗情况netstat发现大量的SYN-RECV

1aac3e53c6fcd48690954b31dceabaeb.png

通过上面的现象判断是EPG的socket资源被耗尽进而出现了响应客户端异常,导致了LVS检测EPG服务器异常,因集群是5台EPG服务器,一台异常后LVS集群把用户调度到其它EPG服务器,此时异常用户也对该服务器产生了影响出现了该服务器也被资源耗尽,依次循环。根据当前的用户量程度来看一般EPG的资源应该是可以满足,进一步查看资源情况发现是EPG的句柄数被耗尽导致的,当重启EPG后,资源被释放句柄数被释放问题故障就恢复了。查看EPG服务器发现系统的默认句柄数为1024。

LVS原理分析:

当有异常用户访问EPG时,SYN消息先发送到LVS,LVS会建立一个调度表,显示用户与EPG的TCP对应关系,EPG会直接返回ACK给用户端不经过LVS,只有LVS收到用户端发送的FIN时,表项的对应关系才会删除该用户客户端的EPG对应关系。

当用户访问突然异常且量大的时候EPG默认的句柄数只有1024,这样会导致LVS踢出该EPG,但是此时LVS建立的表里面的TCP关系还在所以inactive数会变的特别大,根据LVS调度策略用户会被调度到其它EPG真实服务器,这样就会形成恶性循环,所有集群的EPG真实服务器会被资源耗尽。

五、处理优化措施

从上述分析来看本次故障根本原因是EPG真实服务器的句柄数采用默认的1024,一旦出现异常用户访问的时候就会变的脆弱,目前修改为了204800。经过本次故障,对系统的参数做了确认和文档化

六、参数修改记录

修改记录一:net.ipv4.tcp_timestamps = 0

原因如下

1、slb服务器为了优化性能,调整以下内核参数:

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_recycle = 1

当这两个参数都打开时,tcp需要校验syn包的时间戳(timestamp)对集团用户有影响使其接入失败。

2、当满足以下条件,syn包将会被忽略,不会回复ack包:

a、该源ip的上次tcp通讯发生在60s内。

b、该源ip的上次tcp通讯的timestamp 大于本次tcp。

注:tcp通讯的timestamp 为系统启动到当前的时间。

3、解释现象:

a、为什么普通的用户播放正常,集团用户不行?

一个ip对应一个普通用户,那么普通用户的tcp通讯的timestamp是一直增大的,即不会满足2中的b条件。

集团用户是做了NAT的,一个ip对应多个客户端,只有tcp通讯的timestamp比较大的客户端(大堂)才能请求成功,timestamp比较小的(房间)请求就失败。

b、房间偶尔又能播放?

该源ip的上次tcp通讯发生在60s之外了。

修改记录二:net.ipv4.tcp_max_tw_buckets = 5000

TIME_WAIT状态的连接过多,会影响到大并发。

修改记录三:net.ipv4.tcp_synack_retries = 0

net.core.somaxconn = 65535

writen:aaron

time:20170106

原因如下:

SYN Flood(TCP洪水攻击优化)

tcp_synack_retries:表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,不进行重试,加快回收“半连接”,不要耗光资源。可以把tcp_synack_retries改为0,因为客户端还有tcp_syn_retries参数,默认是5,即使服务器端没有重发SYN+ACK包,客户端也会重发SYN握手包。

net.core.somaxconn:最大的监听队列的长度,默认限制为128,在高突发的请求中可能会导致链接超时或触发重传。

修改记录四:

括号值为修改后的值,(X)代表删除。

net.ipv4.tcp_fin_timeout = 5 (1)

net.ipv4.tcp_max_syn_backlog = 10240(262144)

net.ipv4.tcp_max_tw_buckets = 5000(6000)

net.ipv4.tcp_mem = 24794688      33059584        49589376 (X)

net.ipv4.tcp_retries1 = 3 (2)

net.ipv4.tcp_retries2 = 15(2)

net.ipv4.tcp_keepalive_intvl = 75(2)

net.ipv4.tcp_keepalive_probes = 9(3)

net.ipv4.tcp_keepalive_time = 7200(2)

net.ipv4.tcp_rmem = 4096     87380      4194304(X)

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_timestamps = 0(1)// timestamps可单独起效

net.ipv4.tcp_tw_recycle = 1(0)// 需要timestamps起效,此项才奇效,单独开启无意义

net.ipv4.tcp_wmem = 4096    16384      4194304(X)

net.ipv4.udp_mem = 24794688     33059584        49589376(X)

net.ipv4.udp_rmem_min = 4096(X)

net.ipv4.udp_wmem_min = 4096(X)

net.core.rps_sock_flow_entries = 65535

// nf_conntrack 避免iptables的conntrack模块故障

net.netfilter.nf_conntrack_acct = 0

net.netfilter.nf_conntrack_checksum = 1

net.netfilter.nf_conntrack_events = 1

net.netfilter.nf_conntrack_events_retry_timeout = 5

net.netfilter.nf_conntrack_expect_max = 256

net.netfilter.nf_conntrack_generic_timeout = 6

net.netfilter.nf_conntrack_helper = 1

net.netfilter.nf_conntrack_icmp_timeout = 3

net.netfilter.nf_conntrack_log_invalid = 0

net.netfilter.nf_conntrack_max = 524288

net.netfilter.nf_conntrack_tcp_be_liberal = 0

net.netfilter.nf_conntrack_tcp_loose = 1

net.netfilter.nf_conntrack_tcp_max_retrans = 2

net.netfilter.nf_conntrack_tcp_timeout_close = 5

net.netfilter.nf_conntrack_tcp_timeout_close_wait = 6

net.netfilter.nf_conntrack_tcp_timeout_established = 5

net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 3

net.netfilter.nf_conntrack_tcp_timeout_last_ack = 3

net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 3

net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 3

net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 3

net.netfilter.nf_conntrack_tcp_timeout_time_wait = 2

net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 3

net.netfilter.nf_conntrack_timestamp = 0

net.netfilter.nf_conntrack_udp_timeout = 3

net.netfilter.nf_conntrack_udp_timeout_stream = 3

net.nf_conntrack_max = 524288

修改记录五:

net.ipv4.tcp_max_tw_buckets = 6000 (262144)

原因:tcp_max_tw_buckets的默认值为262144

修改记录六:

增加修改文件句柄数:在/root/.bash_profile增加ulimit -n 204800

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dnf时装预览怎么打开_dnf怎么查找各职业时装代码

类型:游戏辅助大小:898KB语言:中文 评分:6.5标签:立即下载DNF Extractor这个软件的出现让很多不想花钱或是觉得官方时装或界面不好看的玩家能自己定制自己的游戏风格,各论坛网站上有很多模型补丁的下载&…

然后是几点

7-2 然后是几点(15 分)有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个…

c语言作业系统输出超限,C语言网Online Judge系统支持语言和编译说明

Online Judge系统支持语言和编译情况:语言编译器语言版本编译参数Cgcc 4.6.3C99gcc Main.c -o Main -Wall -lm –static -stdc99 -DONLINE_JUDGECgcc 4.6.3C98/03g Main.cpp -o Main -Wall -lm –static -DONLINE_JUDGEJavaJava”1.7.0_60″Java7javac -J-Xms32m -J…

演讲实录丨CAAI名誉副理事长杨强教授:人工智能的金融实践

杨强CAAI 名誉副理事长、微众银行首席人工智能官AAAI/ACM/IEEE/CAAI/AAAS Fellow转自中国人工智能学会CAAI原创 丨 作者杨强教授以下是杨强教授的演讲实录:今天的报告主要讲两个内容,一个是人工智能发展;另一个是如何在金融领域落地。刚才已经…

玩转python(2)多线程的历史2

线程这个概念早在多核CPU出现之前就提出来了,单核时代的多线程主要是为了让CPU尽量不处于空闲状态,使其计算能力始终能得到利用。但本质上讲,在任意时刻只有一个线程在执行。 尽管任意时刻只有一个线程在执行,但是依然有些问题需要…

下取整函数的含义_取整函数解读

关于[x]以及{x}的性质与应用摘要:[x]和{x}是非常重要的数论函数,其他许多数学分支都要涉及到,在国内外的数学竞赛中也经常出现含有[x]和{x}的问题,这类问题新颖独特,颇具启发性。本文主要讨论[x]以及{x}的性质,和[x]以及{x}在数学中的应用&am…

基本的Windows相关的DOS命令

常见的DOS命令: exit:退出当前DOS命令窗口 cls:清屏 dir:列出当前目录下所有的子文件 cd:改变当前目录 cd路径 路径分为绝对路径与相对路径 绝对路径:表示该路径是从某个磁盘的盘符下作为出发点的路径…

keil 51 单片机c语言串口发送和接收程序,【精选】51单片机串口通信程序。。含详细例子51单片机串口通信程序。。含详细例子.pdf...

【精选】51单片机串口通信程序。。含详细例子51单片机串口通信程序。。含详细例子51单片机串口通信1./* 9600 11.0592MHz1./* 9600 11.0592MHz11..//**打开串口调试程序,将波特率设置无奇偶校验晶振1111.MHHzz,发送和接收使用的格式相同,如都…

ASP.NET MVC中的路由IRouteConstraint方法应用实例

在如下代码的写法中: public class RouteConfig{public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapPageRoute("Report", "report", "~/Content/page/r…

2020年第五届中国通用人工智能年会

来源:知乎-刘凯-AGI现阶段,人工智能热正迅速“退烧”而回归理性,主流人工智能学界急切寻觅新的突破口。通用人工智能再次获得关注,并被期待成为下一轮技术引爆点。中国通用人工智能年会已成功举办四届,涉及计算机科学、…

post发送byte数组_KAFKA消息发送

消息发送的整体架构RecordAccumulator 主要用来缓存消息以便 Sender 线程可以批量发送,进而减少网络传输的资源消耗以提升性能。RecordAccumulator 缓存的大小可以通过生产者客户端参数 buffer.memory 配置,默认值为 33554432B,即32MB。如果生…

Java语言的特性

1. 简单性。Java语言的语法与C语言和C语言很接近,使得大多数程序员很容易学习和使用Java。 2. 面向对象。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口…

%dn在c语言中是什么意思,请问C语言中 char far 是什么意思?

near指针和far指针?在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。far指针的长度是32位&a…

未来的趋势发展 802.11v网络协议解析

目前的无线网络中,一个基站通常与拥有最强信号的接入点联系在一起。但是,这个接入点也许过载了。在802.11v标准中,包括了一个指令,接入点能够使用这个指令要求一个基站报告它支持的无线电信道、传输的功率范围、数据速率和支持的身…

从特斯拉到爱因斯坦,物理学家为何钟情于猫

牛顿和猫洞的故事,图片来自3milliondogs.com来源:数学中国尽管我们看到了大量的猫被用作实验对象。面对科学发展过程中这黑暗一面,我有必要强调一下,纵观历史,许多物理学家与他们的猫的关系要友好得多,猫成…

win10远程桌面连接凭据怎么设置_想在家办公,只需打开win10远程桌面连接就可以了,还犹豫什么...

远程桌面连接是一种使用户能够坐在一台计算机前连接到其他位置的“远程计算机”的技术。例如,用户可以从家庭计算机连接到工作计算机,并访问所有程序、文件和网络资源,就好像坐在工作计算机前一样。另外,用户可以让程序在工作计算…

c语言 嵌入式开发环境搭建,嵌入式C语言环境的搭建

IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit|IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit| IMPORT Main ; 声明C程序中的Main()函数 AREA Start,CODE…

Java的加载与执行

Java的运行包含两个特别重要的阶段:编译阶段,运行阶段。 编译阶段:编译阶段的主要任务是检查Java源程序是否符合Java语法。 符合Java语法则能够生成正常的字节码文件(xxxx.class) 不符合Java语法规则则无法生成字节码…

luogu1168 中位数

题目大意 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数。即前1,3,5,……个数的中位数。 题解 要找到中位数我们需要的序列是单调不减的,故可以…

费曼:所有的科学知识都是不确定的

编辑 ∑Gemini来源:设计与哲学一、不存在决定什么是好概念的权威 观察是一个概念是否含有真理的判官,但这个概念从何而来的呢?科学的快速进步和发展要求人类发明出一些东西用以检验。在中世纪,人们认为只要多做观察,观察结果本身就…