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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

post发送byte数组_KAFKA消息发送

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

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

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

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

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

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

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

Java的加载与执行

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

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

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

Java--PATH环境变量

JDK安装成功后,对源程序首先需要进行的就是编译。 在DOS环境下输入javac,会出现以下提示:javac 不是内部或外部命令,也不是可运行的程序 或批处理文件。 出现这个问题的原因是:Windows操作系统无法找到javac命令文件…

RISC-V会被卡吗?那么你觉得C语言会不会被卡? | 包云岗

来源: 风云之声本文是对于知乎问题《从技术的角度来看,RISC-V 能对芯片发展、科技自主起到哪些作用?》的回答(https://www.zhihu.com/question/425542531/answer/1607862976)。一、关于RISC-V的一些解读看到很多回答都…

easyui 调用dialog中的方法_SolidWorks中标准件库的创建及调用方法

在使用SolidWorks进行产品设计时,常用的标准件(如螺栓、螺母、垫圈等)通常可以在安装了SolidWorksToolbox插件后调出使用,而许多标准件在Toolbox并不存在,不能从插件中直接调用。在用到这些零件时,设计人员…

【测试设计】基于正交法的测试用例设计工具--PICT

前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法,但是实际工作过程中当成对组合量太大,我们往往很难做到有效的用例覆盖。 PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上述的难题。使用它我们可以有效地按照两两测试的…

Alpha fold: 人工智能在蛋白质结构预测上跑赢人类的启示

来自孙卫涛科学网博客2020年12月,Alpha Fold2在CASP14上 获得了惊人的进步,其蛋白质结构预测的能力已经达到了与实验方法相媲美的程度,国内外该领域的专家学者都为之惊叹,同时也都感受到巨大的压力,人工智能首次把一个…

卷积神经网络爬虫实现新闻在线分类系统

卷积神经网络&&爬虫实现网易新闻自动爬取并分类 项目地址 采用THUCnews全部数据集进行训练,效果如下。 详细实现见./text_classification 部署步骤如下: 运行环境 服务器:Ubuntu 16.04 数据库:Mysql 5.6 python&#xf…

搞基础理论研究有什么用?

来源:数学中国人类文明的诞生是一个奇迹,构筑在现代科学技术基础之上的现代人类文明的诞生更是奇迹中的奇迹。这个奇迹中的奇迹的根基是现代技术及其广泛应用,而现代技术的根基则是现代科学,科学的根基是以数学为主要工具的基础科…

由内而外:大脑是如何形成感官记忆的

大数据文摘出品来源:sciencedaily编译:张大笔茹通常,大脑会对我们感官收集的信息进行编码。为了感知环境并与之进行建设性的互动,这些感官信号需要在以往的经验和当前目标的背景下进行解释。最新一期的《科学》杂志上,…

oracle clob截取_Oracle数据库设计规范建议

Oracle-数据库设计规范建议来源于项目资料目的本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好的保证。数据库设计是指…

揭秘美国空军如何用AI技术提升“战斗力”

以AI技术为基础,美国空军正努力将自身转化为更强调协作性的组织。来源丨Forbes作者丨Kathleen Walch编译丨科技行者通过增加数据规模与相关素养提升,美国空军各部门及人员,将建立起更强的决策、战略、任务执行以及网络安全保障效率与能力。以…

数字孪生:如何撑起一个万亿市场的产业变革?

来源: 脑极体 今天我们介绍一个在产业界如火如荼,但大众还非常陌生的概念:数字孪生(Digital Twin)。在解释这一晦涩难懂的概念前,我首先想到了一个人,前苏联著名的昆虫学家、数学家和哲学家——…