今天 SMB 又突然好慢,大概只有 8-9 MB/s,而苹果 SMB 很容易突然很慢是出了名的。我就想装 NFS,但是 NFS 弄好之后还是很慢,我服了,我就检查了scp
等场景,都很慢,但是互联网下载速度还是很快的。
例如 iperf
的测试结果如下:
怎么说呢,你可以一个慢,说明是服务问题,但是啥都慢,那就很吓人了。
在这期间我找了很多方法,看了很多帖子,文档,但都没有用(一些不错的我会贴在末尾,虽然对本文没帮助,但是算是扩展知识面)。
在想不到办法的时候,我就开始用 Ping 看路由,我怀疑是不是中间经过了什么东西(我甚至没开交换机用的直连),但是很遗憾,并没有。并且线也换了几个,也用了 USB 转 RJ45 和显示器上的 RJ45 接口。我甚至用 Windows 试了一遍,发现是正常的。
在经过数个小时的折磨后,突然我在 Ping 传输的时候拔掉了网线,然后我发现,IP 端口居然是 Wi-Fi 发,以太网接口收(下面 Src 是 Mac 自带以太网接口 IP,Dst 是 Ubuntu 的 Wi-Fi 接口 IP):
啊这,终于找到问题所在了。
不过很可惜的是,我在下一步之前没有使用 netstat -rn
进行检查。不过事后再次开启 DHCP 自动分配 IP 之后 netstat -rn
显示访问 IP 169.254.2.7
的网络接口(Netif 是 network interface 的缩写)是 en1
(这里剧透了):
而 en1
则是 Wi-Fi 的 BSD 设备名称。
而且 Ping 的这个结果也太不像双绞线的速度,延迟太高了也,就那么点线,我还换了几根,换成 15 厘米的都不行(可以看最后的最大/平均/最小值就会发现波动太大了):
这里你可能会说:难道你之前发现很慢,就没质疑过跑的 Wi-Fi 吗?
我怀疑了,我也打开路由器管理界面了,但是很遗憾,上面没有显示速度。
有可能是网络接口太多了,也可能是之前调整太多出了 Bug。
定位到症结所在,那么就是解决问题了。
为什么我当时这么笃定是 IP 问题呢?
因为我三年前做了个 Dell U2723QE 显示器相关的视频(估计你可以因此找到我的 B 站账号哈哈哈),有个评论说显示器上的网口插上不管用。
我测试的时候发现,macOS DHCP 的速度很慢,然后有可能就不给了,这就导致这个接口没法用,解决方案就是再开关一下。
果然经验是要积累的。
这里你可以看到,默认
default
是192.168.1.1
和en1
,所以 src 一开始走 Wi-Fi,毕竟现在的 Mac 大部分都没有自带的网口,都是无线网。
默认子网掩码是 255.255.0.0
,按理来说两个也碰不到头,但是它就是碰到了,试试看手动设置 IP 地址和子网掩码,这里我改成如下内容:
OK 再来试试。
IP 地址和接口没错:
iperf
测试速度没错(就是千兆网):
SMB 服务器拷贝速度也没错:
太完美了,因为改完这个立马就好了。
我并不清楚这个方法的通用性如何,但是我如果以后再次遇到了相关错误,我会来进行补充。
希望能帮到有需要的人~
扩展阅读
下面是我之前找解决方案的时候看到的几篇的资料(主要是前两个)。
Adjust SMB browsing behavior in macOS - Apple Support:这个是苹果官方培训资料,里面提到“要加快 SMB 文件浏览速度,您可以阻止 macOS 读取 SMB 共享上的 .DS_Store 文件。这使得 Finder 仅使用基本信息立即按字母数字顺序显示每个文件夹的内容。”
How to disable SMB 1 or NetBIOS in macOS - Apple Support:这个和上者输出一样,但是提到了如何关闭 SMB 1(太老了不安全,但是兼容性高):
PowerEdge:如何使用“iperf”测试网络带宽 - Dell Technologies:Dell 的一个关于如何使用iperf
的使用说明,因为其他的好多说一堆没说到点上,这个比较简洁清晰,方便查询。并且由于版权,也链接了 iperf
的主页。
FreeBSD 的手册第 31.2 章 - 网关和路由:这部分介绍了netstat -rn
结果里的Flags
部分的含义。