Administrator
Administrator
发布于 2026-01-10 / 58 阅读
0
0

为什么 scp 大文件传输会越传越慢,以及我是如何解决的

最近在往家里的 Ubuntu 服务器上传 Stable Diffusion 模型,
模型不多,但体积很大——加起来 36 多 GB。
服务器在家里,本机在家里,

同一个 Wi-Fi、同一个路由器、局域网传输。

我一开始想的是:

这不就是 scp 一行命令的事吗?

结果狠狠踩了一坑。


事情的开始:scp 一开始很快

我在 Mac 上执行:


scp *.safetensors gyq@192.168.31.82:/usr/local/deploy/stable-diffusion-webui/models/Stable-diffusion/

刚开始非常正常:

  • 速度 17~18 MB/s
  • 心里想:稳了,十几分钟搞定

但问题来了。


奇怪的现象:速度突然掉到 200KB/s

传着传着,速度开始明显下降:

  • 17 MB/s
  • 5 MB/s
  • 1 MB/s
  • 最后稳定在 200~300 KB/s

而且不是一会儿,是 一直慢。

更离谱的是:

  • Wi-Fi 信号满格
  • 同时刷网页、看视频都没问题
  • 服务器和 Mac 都在家里

这就很反直觉了:

为什么“同一个 Wi-Fi”的 scp,会越传越慢?


scp 其实没错,错的是使用场景

后来排查下来,结论其实很简单。

1. scp 是“一条路一直猛冲”的那种工具

scp 的特点是:

  • 单连接
  • 持续推大数据
  • 几乎不考虑“慢一点稳不稳”

这在 有线网络 / 机房 里没问题,

但在 家用 Wi-Fi 下,很容易出事。


2. Wi-Fi 本身不适合这种“长时间猛传”

Wi-Fi 有几个特点,平时我们感觉不到:

  • 不是全双工(不能同时高速收发)
  • 对延迟和抖动很敏感
  • 家用路由器的缓冲区很小

scp 一口气把数据往里塞:

  • 路由器先“憋着不丢”
  • 延迟越来越高
  • 传输工具以为“网络不行了”
  • 于是主动降速

最后就卡在一个:

“不至于断,但慢到怀疑人生”的速度


3. 为什么一开始快,后面慢?

因为:

  • 一开始网络是“干净的”
  • 路由器缓存是空的
  • 速度被瞬间拉满

跑一段时间后:

  • 队列满了
  • 延迟上来了
  • 速度被压到极低

这也是为什么你会看到:

“开头很爽,后面像被限速”


换思路:不要“推”,让服务器来“拉”

既然 scp 这种“硬推”方式不适合,

那我就换了一个思路:

不从 Mac 推到服务器,而是让服务器自己来下载


我的解决方案:HTTP 本地服务器 + wget

1. Mac 上开一个临时 HTTP 服务

模型已经在 Mac 上了,于是我直接:


cd /Users/guoyunquan/Downloads

python3 -m http.server 8000

这一行做了什么?

  • 把当前目录临时变成一个下载站
  • 局域网内任何机器都能访问

2. 服务器用 wget 下载

在服务器上执行:


wget -c http://192.168.31.53:8000/sd-models.tar.zst

这一步的体验是:

  • 速度稳定
  • 没有突然掉到几百 KB
  • 中断了还能继续
    scp.jpg

为什么 HTTP 反而更稳?

原因很简单:

  • HTTP 下载是 服务器主动拉
  • wget 对网络抖动更友好
  • 路由器对 HTTP 流量“更熟悉”
  • 即使慢,也不会“自废武功”

这也是为什么:

  • NAS
  • 局域网镜像
  • 内部文件分发

很多都用 HTTP / SMB,而不是 scp。


最后的总结

这次踩坑给我一个很清晰的结论:

  • scp 不是万能工具
  • “同一个 Wi-Fi” ≠ “永远稳定高速”
  • 大文件 + 局域网,让服务器来拉,比本机推更稳

如果你遇到类似情况:

  • 传 AI 模型
  • 传镜像
  • 传几十 GB 的文件
  • 速度一开始很快,后来极慢

真的别硬怼 scp。


一句话经验

scp 适合“小而快”,
HTTP / SMB 适合“大而稳”。


评论