我的网络传输速度为什么突然下降了
前言
这个问题是我星球成员做星球里面的必做实验时碰到的一个问题
最后的分析用到了我们的抓包大法+ping一ping真牛逼的证明方案,所以特意放出来供大家试试,同时也检验大家对知识的掌握和运用。
这个问题很好,在EC2上稳定重现,假如你们的业务碰到了这个问题你怎么解决?
或者换个场景描述:你有一个SQL单独执行很快,2个SQL并行一起查速度就降到了原来的10%,是DB还是谁的锅?
推特上大佬们的讨论,看看别人都是怎么思考和推理的:https://treeverse.app/view/RDzsOXjO
问题描述
一个降速问题,在AWS的 t2.micro机器上几乎100%复现,操作:
- 开三台aws t2.micro机器,一台做server两台做client, 已知正常情况rtt是0.5ms,bandwidth 60mbps,文件大小2g
- client1 去curl get server 文件,等一段时间速度稳定在 60mbps
- 然后用 client2 去curl get server 文件
- 可以观察到两个client都降速到3.5mbps,这种情况就是算把server跑坏了。
- 关掉client2, 观察到client1恢复到7-8mbps,但是远低于60mbps的带宽上限,也就是速度被限制到了标称的10%
- server搞坏之后,client重新下载就会出现一开始还行,但过10s就会掉到7-8mbps的情况,需要重启server才能恢复到60mbps
星球不能发多图,和pcap文件,重现的详细抓包、截图等都放在 google driver上了: https://drive.google.com/drive/folders/13rsOQ-6VZhXu0JRMLlUypRposRRcRN-a (建议大家去下载client2.pcap抓包看看)
抓包发现大量dup ack, 且bytes in flight很大,server send buffer很大。
==强烈建议你先别往下看,去下载上面链接中的抓包文件分析看看,然后和下面的分析对比一下==
分析
有网络大牛陈硕老师 在EC2上重现了这个问题 以及他的分析,速度由300Mbps下降到了60Mbps:
以及 左耳朵耗子 老师也做了实验以及分析:https://twitter.com/haoel/status/1654655067365179393
我的分析:https://articles.zsxq.com/id_iq5a872u8sux.html
证明
证明原理如这个图
总结
99%的人不会弄脏双手去实验,哪怕是只需要下载一个抓包就能分析出来都不会去下载。但是为什么刚好是两位陈老师会去测试重现一下呢(原谅你没有AWS机器,但是不接受你不去google driver下载抓包文件 :) ),大概率他们的时间、经验、知识都比你要丰富一些,但是他们不忌惮弄脏手而你只想做个过客看看就懂,但最后你真的啥都没看懂!