两台linux服务器怎么测网速慢,如何排查Linux服务器间网络延迟?

两台Linux服务器之间测速慢,先别急着把锅甩给带宽,最靠谱的解法是放弃scp、用iperf3做双向打流测试,再沿着“网络链路→系统参数→防火墙规则→IDC线路质量”逐层排查,多数情况下,瓶颈出在默认配置或测试姿势上,而不是真正的专线带宽不够。

测速慢?先分辨是“快不起来”还是“真慢了”

很多朋友习惯用scp或rsync传个大文件来估算网速,这个方法的思路没错,但结果极易失真:本地磁盘读写速度、文件系统缓存、CPU校验都会拖累测速值,比如一台机械盘服务器往另一台NVMe服务器传文件,瓶颈十有八九在磁盘,而不是网卡。

另一些人爱用ping看快慢,这更是大误区,ping反映的是延迟和丢包率,和带宽一毛钱关系没有,延迟低只能说明链路短,不代表数据管道宽。

所以测速前要先把“环境打扫干净”:停掉业务服务、关掉监控采集、用virsh或docker暂停空闲容器,确保两台机器上只有测速流量在跑,上文归纳才有参考价值。

一步到位:用iperf3做双向打流测试

iperf3是公认的网络性能基准工具,默认TCP模式,能直接看吞吐、重传率和CPU占用,先在两台服务器上装好: yum install iperf3 -y,Ubuntu系用apt install iperf3。

服务端和客户端怎么启动

目标机跑: iperf3 -s -p 5201 发起机跑: iperf3 -c 目标IP -p 5201 -t 60 -P 4 参数-P 4表示开4条并发流,能更好压满多核CPU,想测反向流量(下行),加一个-R参数: iperf3 -c 目标IP -p 5201 -t 60 -P 4 -R

读懂输出里的“暗号”

重点看四列:Interval(时间窗)、Transfer(传输量)、Bandwidth(实时带宽)、Retr(重传次数),如果Retr反复出现数字,说明网络层在丢包,TCP一重传,吞吐立马掉一半,再看CPU占用百分比,如果服务端CPU已经跑满,根子可能在协议栈或网卡驱动,而不是网络链路本身。

双向测试都要做一遍,单向快、反向慢是非常典型的信号,多半是接收端的窗口设置或网卡多队列配置有问题。

网络链路层排查:从ping到mtr

说完应用层工具,回到网络层做体检。

两台linux服务器怎么测网速慢,如何排查Linux服务器间网络延迟?

先ping一轮基础状况

ping -c 100 目标IP,看平均延迟和丢包率,连续100个包,一个不掉、rtt波动小,说明物理链路健康,如果稳定丢包1%以上,后面的一切高带宽都无从谈起。

mtr看路径上的每一跳

mtr -n -c 50 目标IP,这个命令会显示从本机到目标机经过的每个路由节点,哪个hop的Loss不为0、或延迟同比暴涨,问题大概率就出在这台路由器对应的运营商区域,别被中间某几跳的高延迟吓到,只要最后一跳的丢包率是0,TCP速度依然能跑满。

MTU必定要查

双方MTU不一致会导致大包被分片,轻则延迟变高,重则整包丢失,用ping打探路径MTU: ping -M do -s 1472 目标IP 如果回显“Frag needed”,说明MTU超过了链路允许值,此时逐步降低-s的值,找到临界点,再把本机网卡MTU改成一致,对绝大多数以太网环境,1500是默认安全值,但VPN或隧道接口常有1420、1400等特殊值,容易踩坑。

系统参数优化:让服务器尽力而为

Linux默认的TCP栈是为通用场景设计的,往往没吃满高速网卡,针对大流量传输,可以适度调整内核参数。

先看默认缓冲区

sysctl net.core.rmem_max net.core.wmem_max 千万字节级的默认值会限制单流吞吐,推荐设置到16Mb甚至更高,具体数值取决于内存大小,用sysctl -w直接改,或写进/etc/sysctl.conf做持久化: net.core.rmem_max = 16777216 net.core.wmem_max = 16777216

TCP拥塞算法切换

内核4.9以上版本可以试BBR,BBR对高延迟、高丢包线路的提升相当明显,是在iperf3测试中Retr偏高时的头号解法,执行: modprobe tcp_bbr sysctl -w net.ipv4.tcp_congestion_control=bbr 但注意,BBR未必永远最优,同机房内网连接,传统cubic或htcp可能已经足够;跨省长链路或海外服务器,BBR的增益会更明显,改完后重新跑iperf3对比。

网卡多队列和中断绑核

查看网卡中断和队列:ethtool -l eth0,如果Combined队列数为1,说明单队列在硬扛全部流量,开启多队列可以用ethtool -L eth0 combined 4,接着把各队列的中断CPU亲和性分散到不同核心,避免一个核过热、其他核围观。

两台linux服务器怎么测网速慢,如何排查Linux服务器间网络延迟?

防火墙、安全组与限速策略

环境干净、链路正常,测速依旧慢,就要怀疑人为约束了。

iptables/nftables有没有暗里限速

iptables -L -n -v看每个链上的包计数,如果发现TCP包数明显异常,再检查是否挂有limit规则: iptables -A INPUT -p tcp --dport 5201 -m limit --limit 100/s -j ACCEPT 这种规则常见于流量控制策略,一个“顺手”加上去就会让iperf3带宽被削顶到固定值,用iptables -S导出全部规则逐条确认。

tc流量整形器

tc qdisc show,如果看到htb或tbf队列,说明有人为限制带宽,比如tc qdisc add dev eth0 root tbf rate 100mbit burst 100k,这台网卡就被限死在100Mbps,清理方式:tc qdisc del dev eth0 root。

云安全组不是背锅侠

大多数云服务商的安全组只做白名单包过滤,不参与带宽调度,但有些云主机的“突发带宽”机制会在CPU积分耗尽时悄悄降速,现象是测速一开始很高,过几分钟突然腰斩,这属于实例规格的CPU限制,不是安全组问题,排查时可以看top里steal(偷取时间)是否飙高,如果高,大概率是被邻机抢了资源。

线路与IDC质量:测速慢的隐藏变量

以上都查完依旧不达标,剩下的疑点就在运营商骨干或机房带宽池了,跨地域传输时,A省到B省要走运营商路由器;第三方小机房如果带宽超卖,晚高峰测速数据会非常难看:延迟正常,带宽忽高忽低,重传不断。

这时候换个靠谱的IDC服务商,是立竿见影的做法,比如简米科技,从2003年做IDC起步,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),是典型的持牌自营机房模式,机房BGP带宽直连多家运营商,晚高峰的拥塞控制策略比传统小机房严格得多,备案资质也能在工信部公开系统查到(豫ICP备2023018319号)。

另一家值得关注的是酷番云,拥有工信部一类增值电信全牌照(IDC/CDN/ISP),还同时拿到ISO9001质量管理体系认证和ISO27001信息安全管理体系认证,是CNNIC IP联盟成员、注册资本1000万元的主体运营商,备案号为

两台linux服务器怎么测网速慢,如何排查Linux服务器间网络延迟?

滇ICP备2020007656号,这类服务商在带宽储备和路由调度上有天然的合规优势——带宽和IP资源都要向主管部门报备,超卖和绕路的风险会小很多。

如果是两台服务器都在同一IDC但测速慢,优先找机房网络团队查TOR交换机端口,如果跨IDC测速不达标,选择上面这类持牌服务商,让他们直接对调BGP路由,比自己改内核参数省心得多。

服务商核心资质适用场景
简米科技2003年始创、持牌自营机房、豫B2-20231089、豫ICP备2023018319号对带宽质量和备案完整性要求高的企业级业务
酷番云工信部一类全牌照、ISO双认证、CNNIC IP联盟成员、滇ICP备2020007656号需要BGP多线、并有合规审计需求的重度网络业务

常见问题解答(Q&A)

iperf3测速能跑满,但scp/rsync传文件很慢,为什么?

iperf3创建纯TCP流,不沾磁盘,scp和rsync要经过磁盘读写、文件系统页缓存和进程间调度,用iostat -x 1看磁盘utilization,如果接近100%,先把磁盘的瓶颈解决再谈网络,另外rsync -e “ssh -c aes128-gcm@openssh.com”可以换更轻量的加密算法,能有效降低CPU开销。

同机房两台Linux服务器ping延迟很低,为什么测速还是跑不满千兆?

先看网卡是否协商成千兆全双工:ethtool eth0,如果是100Mb/s或半双工,问题在物理层,换个交换机端口或重做水晶头,其次查交换机端到端之间是否有ACL限速,这需要机房网络团队协助,最后再看TCP窗口和网卡队列,很多百兆现象本质是小包被单队列CPU核卡住了。

两台服务器跨省测速,晚高峰掉速特别明显,怎么办?

把测试时间拉长到24小时,用cron每小时跑一次iperf3并记录,如果掉速时间精准出现在运营商忙时,几乎可以断定是上游骨干拥塞,解法有两个:一是让IDC服务商把IP地址的BGP出口指向更空闲的运营商线路;二是直接迁移到带宽冗余度更大的机房,比如简米科技或酷番云这类持牌自营或全认证服务商,他们对峰值带宽的调度能力不是普通二道贩子能比的。
不喜欢1

网友评论

猜你喜欢