将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止
Posted
技术标签:
【中文标题】将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止【英文标题】:sending a large file with SCP to a certain server stalls at exactly 2112 kB 【发布时间】:2012-08-12 16:12:29 【问题描述】:有一个特定的 ubuntu 10.04 服务器,如果我从该服务器所在办公室之外的任何服务器将文件 ssh 到该服务器上(这意味着任何使用 scp-ing 从该服务器内部通过 LAN 到该服务器上的任何使用总是适用于某种原因),然后 scp-ing 对任何大小超过 2112 kB 的文件都失败,并停留在 2112 kB。 所以
scp -vvv /home/attila-szeremi/aszeremi.tar.gz attila@server.hu:~/aszeremi.tar.gz
在末尾动态显示类似1% 2112KB 909.2KB/s - stalled -
的内容,其中 KB/s 越来越低。
有谁知道这可能是什么原因以及我该如何解决?
到目前为止我所尝试的:
使用 scp -l 2000 限制速度。它只是让文件发送速度变慢,在 2112 kB 时又卡住了。 使用 -C 启用压缩。它仍然停留在相同的大小。【问题讨论】:
检查目标是否有空间容纳整个文件。 同样的问题。 answers 都没有帮助我。我切换到rsync
,问题就消失了。在我的情况下,这不是一个解决方案,而是一个体面的解决方法。
我们还发现,在发送方和接收方之间的路由器上错误配置的 tcp 拦截也会停滞在 2112KB。
【参考方案1】:
我设法摆脱这个问题的唯一方法是disabling TCP SACK:
$ sudo sysctl -w net.ipv4.tcp_sack=0
【讨论】:
也适用于 Ubuntu 14.04。更改 MTU 或限制速度没有帮助。禁用 SACK 后,我可以毫无问题地回到无限速度。这应该是答案。 我收到错误:mac 上的未知 oid 'net.ipv4.tcp_sack=0'【参考方案2】:我似乎找到了解决办法。我必须通过以下方式将 LAN 卡的 mtu 设置为 1492:
# ifconfig eth0 mtu 1492
【讨论】:
谢谢!这解决了我在将文件复制到 CentOS 6.4 虚拟机时遇到的 SCP 停滞问题。传输将在相同的 2112 KB 点停止。 这是 2014 年,运行最新的 Debian,全新安装,这仍然是我的 PC 上的问题?感谢您的修复。知道为什么它不是开箱即用的 1492 吗?【参考方案3】:在较新的 Linux 系统上,ifconfig 命令可能已被 ip
取代设置mtu的命令变成:
# ip link set dev eth0 mtu 1492
【讨论】:
【参考方案4】:我在 Mac OS X 上遇到了同样的问题,@dav.garcia's answer 为我做了一个小小的改动:
$ sudo sysctl -w net.inet.tcp.sack=0
【讨论】:
【参考方案5】:我也看到了同样的问题。以上建议都不适合我,但它们让我走上了正确的道路。我在防火墙后面,MTU 设置为 1300。将我的 LAN 卡的 MTU 设置为非常低(576,有点随机)导致我的数据包停止被丢弃。
$ sudo ifconfig eno1 mtu 576
我必须在我的每个 Linux 客户端上执行此操作。由于某种原因,同一子网的windows机器没有问题。
【讨论】:
以上是关于将带有 SCP 的大文件发送到某个服务器时,会以 2112 kB 的大小停止的主要内容,如果未能解决你的问题,请参考以下文章