为什么文件越大,我的本地网络传输速度就越慢?

为什么文件越大,我的本地网络传输速度就越慢?

简洁版本:我在本地有线网络上有一台 Linux 服务器 (RHEL5) 和一台 Windows 7 Professional 笔记本电脑。将大文件复制到服务器的速度逐渐变慢,直到完全停止。

长版本

服务器上有一个 Samba 共享,我可以连接到它,并且具有读/写访问权限。

从服务器到笔记本电脑的所有传输都工作正常,但从笔记本电脑到服务器的传输速度似乎受到限制,有时甚至完全失败。

小文件传输正常,但超过 2MB 的文件通常会传输失败。

为了测试这是 Samba 问题还是其他问题,我尝试使用scp(Putty 的pscp)将一些文件从笔记本电脑复制到服务器。1MB 文件几乎可以立即复制,2MB 需要 3 分钟,3.7MB 需要 18 分钟。因此,这不是 Samba 独有的。

此外,使用 Samba 和 SCP,我可以轻松复制几 MB 的小文件。

是什么原因导致了这种现象?如能得到任何建议,我将不胜感激。

Windows 显示以下错误消息:

There is a problem accessing H:\
Make sure you are connected to the network and try again

在服务器上,ifconfig显示一些错误:

eth0      Link encap:Ethernet  HWaddr 00:22:19:AD:52:E2
          inet addr:192.168.1.7  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::222:19ff:fead:52e2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4125439 errors:72181 dropped:0 overruns:0 frame:0
          TX packets:3575918 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4481289749 (4.1 GiB)  TX bytes:581533090 (554.5 MiB)
          Interrupt:169 Memory:dfdf0000-dfe00000

/var/log/messages

Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:read_data(540)
Aug 16 14:50:16 dev smbd[475]:   read_data: read failure for 4 bytes to client 192.168.1.12. Error = Connection reset by peer
Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:write_data(568)
Aug 16 14:50:16 dev smbd[475]:   write_data: write failure in writing to client 192.168.1.12. Error Broken pipe
Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:send_smb(767)
Aug 16 14:50:16 dev smbd[475]:   Error writing 75 bytes to client. -1. (Broken pipe)

/var/log/samba/smbd.log

[2013/08/16 14:50:16, 0] lib/util_sock.c:read_data(540)
  read_data: read failure for 4 bytes to client 192.168.1.12. Error = Connection reset by peer
[2013/08/16 14:50:16, 0] lib/util_sock.c:write_data(568)
  write_data: write failure in writing to client 192.168.1.12. Error Broken pipe
[2013/08/16 14:50:16, 0] lib/util_sock.c:send_smb(767)
  Error writing 75 bytes to client. -1. (Broken pipe)
[2013/08/16 14:50:16, 1] smbd/service.c:make_connection_snum(1077)
  liam-pc (192.168.1.12) connect to service external initially as user liam (uid=502, gid=502) (pid 529)

编辑:如果我在笔记本电脑上启动 Ubuntu,我可以毫无问题地将大文件复制到服务器上的 SMB 共享。因此,问题要么出在 Windows 7 上,要么出在 Windows 7/RHEL5 组合上。

答案1

我运行了一下service network restart,似乎问题已经解决了。这看起来有点奇怪,因为这个问题已经存在一年多了,从那时起服务器已经重启了好几次。我在 70 秒内将一个 365MB 的文件复制到服务器,平均速度为 5.2MB/s,没有错误。

答案2

这听起来像是网络问题或 Windows 和 Linux Samba 版本之间的不兼容。

您是否尝试过将笔记本电脑直接插入服务器?如果它在 Ubuntu 上运行正常,则应该不是问题,但您可以尝试一下。

您应该进行一些流量捕获,看看您的网络中到底发生了什么。您可以在此处分享,也许我们可以找到问题所在。

如果没有其他方法,你可以尝试这个分析工具。我发现这真的很有趣,你可以上传一个 pcap 文件,他们会通过电子邮件向你发送分析结果。正如我所见,你可以在表单中提交你的问题。

答案3

我遇到这个问题是因为便宜的 D-link 交换机。例如 DGS-1008D。smb 和 nfs 也存在同样的问题。

我使用 wget 和内部 http 服务器来识别网络问题:

wget http://static-http.example.local/1024mb_file -O /dev/null

您可以使用 python 将任何主机用作内部 http 服务器:

python -m SimpleHTTPServer 8000

这将提供相对于服务器上当前目录的文件

然后在客户端使用以下命令:

wget http://host:8000/bigfile.tgz -O /dev/null

如果您拥有千兆网络,则速度应为 90-100Mb/秒左右。如果您拥有 10 Mbit 网络,则速度应为 10Mb/秒左右。

由于文件被缓存,因此第二次尝试读取时可以达到此速度。在文件被缓存之前,您将获得主机磁盘读取速度。

但如果你遇到以太网网络问题,你的网速会比正常情况慢 10 倍

关闭/打开开关可以解决问题,但需要一段时间。

相关内容