[本文来自:www.11jj.com]
反复看了几次之后发现这个overflowed 一直在增加,那么可以明确的是server上全连接队列一定溢出了。
接着查看溢出后,OS怎么处理:
tcp_abort_on_overflow 为0表示如果三次握手第三步的时候全连接队列满了那么server扔掉client 发过来的ack(在server端认为连接还没建立起来)
为了证明客户端应用代码的异常跟全连接队列满有关系,我先把tcp_abort_on_overflow修改成 1,1表示第三步的时候如果全连接队列满了,server发送一个reset包给client,表示废掉这个握手过程和这个连接(本来在server端这个连接就还没建立起来)。
接着测试,这时在客户端异常中可以看到很多connection reset by peer的错误,到此证明客户端错误是这个原因导致的(逻辑严谨、快速证明问题的关键点所在)。
于是开发同学翻看java 源代码发现socket 默认的backlog(这个值控制全连接队列的大小,后面再详述)是50,于是改大重新跑,经过12个小时以上的压测,这个错误一次都没出现了,同时观察到 overflowed 也不再增加了。
到此问题解决,简单来说TCP三次握手后有个accept队列,进到这个队列才能从Listen变成accept,默认backlog 值是50,很容易就满了。满了之后握手第三步的时候server就忽略了client发过来的ack包(隔一段时间server重发握手第二步的syn+ack包给client),如果这个连接一直排不上队就异常了。
但是不能只是满足问题的解决,而是要去复盘解决过程,中间涉及到了哪些知识点是我所缺失或者理解不到位的;这个问题除了上面的异常信息表现出来之外,还有没有更明确地指征来查看和确认这个问题。
深入理解TCP握手过程中建连接的流程和队列
(图片来源:http://www.cnxct.com/something-about-phpfpm-s-backlog/)
如上图所示,这里有两个队列:syns queue(半连接队列);accept queue(全连接队列)。
三次握手中,在第一步server收到client的syn后,把这个连接信息放到半连接队列中,同时回复syn+ack给client(第二步);
上 班 啦!上 班 啦!!是不是感受.....没有一丝丝预防没有一丝丝挂念好多人如今的表情是不是如许▼明明感受假期还没起头,懒觉还没睡够几天几
每年4.24日是世界实验动物纪念日,为增强学院实验动物治理,保障实验动物福利。按拍照关文件要求,通辽职业学院实验动物伦理审查委员会召开第
大家好,小娟今天来为大家解答如何把word转换成excel以下问题,如何将word文档转换成excel表格很多人还不知道,现在让我们一起来看看吧!1、方法一
大家好,小乐今天来为大家解答荒岛余生60天国语版以下问题,荒岛余生60天第二集国语版很多人还不知道,现在让我们一起来看看吧!1、链接: htt
大家好,小美今天来为大家解答三年级作文美丽的校园300字以下问题,三年级作文美丽的校园300字左右三个自然都很多人还不知道,现在让我们一起
大家好,小乐今天来为大家解答蔓越莓粉功效和作用以下问题,蔓越莓粉的服用方法很多人还不知道,现在让我们一起来看看吧!1、密私爱当中含有
卒业答辩已拿下一只脚已经踏出亲爱的鸭大了对于即将卒业的同窗留校时间不足2个月啦大学时光即将竣事也该物色房子了总得为新的本身预备一个平
大家好,小豪今天来为大家解答usb无线网卡怎么安装以下问题,无线网卡怎么安装使用很多人还不知道,现在让我们一起来看看吧!1、首先,将USB无线
Copyright 2024.依依自媒体,让大家了解更多图文资讯!