尚志租房信息,速运,青海西宁特产
点击上方 "编程手艺圈"存眷, 星标或置顶一起成长
后台复原“大礼包”有惊喜礼包!
每日英文
When you think you're not happy with your life, always think that someone is happy simply because you exist.
当你过得不开心的时候,想想有那么一个人,仅仅因为你的存在,就已经感觉很幸福。
每日掏心话
良善是从内心披发出来,是自由选择,人若无法选择,就不是人了。
责编:乐乐 | 来自:zhenbianshu 链接:zhenbianshu.github.io/
编程手艺圈(ID:study_tech)第 1227 次推文
昔日回首:一个漂亮妹子的美团口试履历,4轮2小时,成功拿到Offer
正文
近来有同事在用 ab 进行服务压测,到 QPS 瓶颈后猜疑是起压机的问题,来跟我借测试机,于是我就乘隙阐发了一波起压机可能成为压测瓶颈的可能,除了收集 I/O、呆板性能外,还思量到了收集协议的问题。
当然本文的主角并不是压测,后来阐发证明同事果然照样想多了,瓶颈是在服务端。
阐发起压机瓶颈的过程中,对于 TCP TIME_WAIT 状态的一个猜想引起了我的兴趣。由于之前排盘问题时,简洁地打仗过这个状态,但并未深入认识,于是决意抽时间阐发一下,拆解一下我的猜想。
TCP 的状态转换
我们都知道 TCP 的三次握手,四次挥手,说来简洁,但在不不乱的物理收集中,每一个动作都有可能失败,为了包管内容被有效传输,TCP 的具体实现中也加入了很多对这些异常状况的处理。
状态阐发
先用一张图往返想一下 TCP 的状态转换。
一眼看上去,这么多种状态,各个方向的连线,让人觉得有点懵。但细细阐发下来,照样有理可循的。
首先,整个图能够被划分为三个部门,即上半部门建连过程,左下部门主动关闭毗邻过程和右下部门被动关闭毗邻过程。
再来看各个部门:建连过程便是我们熟悉的三次握手,只是这张图上多了一个服务端会存在的 LISTEN 状态;而主动关闭毗邻和被动关闭毗邻,都是四次挥手的过程。
查看毗邻状态
在 Linux 上,我们常用netstat
来查看收集毗邻的状态。当然我们还能够使用更快捷高效的ss
(Socket Statistics) 来替换 netstat。
这两个工具都会列出此机遇器上的 socket 毗邻的状态,通过简洁的统计就能够阐发出此时服务器的收集状态。
TIME_WAIT 界说
我们从上面的图中能够看出来,当 TCP 毗邻主动关闭时,都会经由 TIME_WAIT 状态。并且我们在呆板上 curl 一个 url 建立一个 TCP 毗邻后,使用 ss 等工具能够在肯定时长内持续察看到这个一连处于 TIME_WAIT 状态。
所以TIME_WAIT 是这么一种状态:TCP 四次握手竣事后,毗邻两边都不再交流消息,但主动关闭的一方连结这个毗邻在一段时间内弗成用。
在公众号后端架构师后台复原“架构整洁”,获取一份惊喜礼包。
那么,连结这么一个状态有什么用呢?
原因
上文中提到过,对于复杂的收集状态,TCP 的实现提出了多种应对步伐,TIME_WAIT 状态的提出便是为了应对此中一种异常状况。
为了懂得 TIME_WAIT 状态的需要性,我们先来假设没有这么一种状态会导致的问题。暂以 A、B 来代指 TCP 毗邻的两头,A 为主动关闭的一端。
本文地址:http://www.wbwb.net/bianchengyuyan/207519.html 转载请注明出处!