多线程为什么速度就快,如何排查原因

florentino · 2024-10-10 09:19:37 · 75 次点击
公司拉了一条移动的千兆 VPN 专线,北京-福州专线,使用 wget 从福州服务器请求北京服务器上面的资源,速度只能到 8M/s,但是使用 axel 进行多线程下载,速度可以到 40-50M/s

网上搜索了下,好像是 TCP 丢包策略,会导致单线程下载降速,但是 ping 了下两端,并没有丢包啊

有谁能知道原因是什么嘛,如何优化能使 wget 下载也能跑 40M/s 左右吗?
举报· 75 次点击
登录 注册 站外分享
1 条回复  
dode 小成 2024-10-10 09:38:52
套一层 wireguard VPN 看看
fuis 小成 2024-10-10 09:40:05
用 tcpdump 抓包看看就知道了
Mithril 小成 2024-10-10 09:40:24
如果你的服务器/ISP 没有限制单个链接速度的话,一般都是 TCP 流控生效了。

wget 不支持针对单个文件的多线程下载,如果你有多个文件的话,可以开多个 wget 同时下载不同的文件,但只有一个大文件就没办法了。
lambdaq 小成 2024-10-10 09:43:19
不是 tcp 丢包策略,而是 tcp 拥堵控制

单线程是一个人排队。多线程就是 n 个人一起排队。别人效率当然高啊。
FishBear 小成 2024-10-10 09:59:22
https://github.com/FishOrBear/mTCP2
上这个 将多条 tcp 聚合成单条 干他
tool2dx 初学 2024-10-10 10:03:48
没什么原因,普通宽带就是 TCP 多线程 > 单线程。你就算用 iperf3 裸测网速,也是这个结果。

不过你 8M/s 和 40M/s 相比,还是有那么一点夸张。我测试下来降速 50%,是正常范围内的。
Meltdown 小成 2024-10-10 10:11:17
试试修改服务器的 tcp congestion control 算法
BingoXuan 小成 2024-10-10 10:16:29
tcp 的滑动窗口越大,也就使得通信过程中等待确认时候缓存的数据大小越大。给定 RTT ,滑动窗口越大速度会越快(快速确认数据传送完成)。当滑动窗口最大时候,RTT 就成了限制速度的天花板。但多线程就等于 RTT 几乎一致的情况下,累积窗口大小乘以线程数量,所以网速就快很多。
D3EP 小成 2024-10-10 10:17:34
关键字,带宽时延积。可以试着改下 socket buffer 。
返回顶部