测试前准备与核心概念
在开始测试之前,明确以下几点至关重要:

明确测试目标
- 带宽测试:测试网络能达到的最大理论吞吐量,类似于测试公路的“车道数”。
- 延迟测试:数据包从发送到接收所需的时间,类似于汽车通过收费站的时间。
- 丢包率测试:在特定负载下,丢失数据包的百分比,类似于公路堵塞导致车辆无法通行。
- 并发连接测试:系统能同时处理多少个活跃的网络连接。
- 应用层性能测试:模拟真实应用(如 HTTP, MySQL)的性能。
测试环境
- 隔离环境:最佳实践是在一个独立、无干扰的网络环境中进行测试,以排除其他流量的影响,使用一根直通网线直接连接两台机器是获取最纯净结果的方法。
- 硬件规格:记录下测试机器的网卡型号(如
Intel X710)、CPU、内存等,网络性能瓶颈可能在 CPU、内存或网卡本身。 - 系统配置:
- 关闭防火墙:
sudo systemctl stop firewalld或sudo ufw disable。 - 关闭 SELinux:
sudo setenforce 0。 - 禁用节能模式:对于服务器,通常需要关闭 CPU 的节能模式以获得稳定性能。
- 更新系统:确保系统和驱动程序为最新版本。
- 关闭防火墙:
关键网络参数
在测试过程中或测试后,你可以使用以下命令查看关键性能指标:
netstat -s: 查看网络协议的详细统计信息,如丢包、错误等。ss -s:netstat的现代替代品,显示套接字统计信息。cat /proc/net/dev: 查看每个网卡的接收和发送字节数、包数等。ip -s link show <interface>: 更详细的网卡接口统计信息,包括错包、丢包等。
常用网络性能测试工具
带宽测试工具
iperf3 - 行业标准
iperf3 是目前最流行、最可靠的网络性能测试工具之一。
安装:
# CentOS/RHEL/Fedora sudo yum install iperf3 # Debian/Ubuntu sudo apt-get install iperf3
使用方法: 测试分为客户端和服务器端。

在服务器端(接收端)运行:
iperf3 -s
服务器会开始监听,等待客户端连接。
在客户端(发送端)运行:
# 基本测试:测试从客户端到服务器的带宽 iperf3 -c <服务器IP地址> # 测试双向带宽(同时进行上传和下载) iperf3 -c <服务器IP地址> -R # 测试反向带宽(从服务器到客户端的带宽) iperf3 -c <服务器IP地址> -R # 指定测试端口(默认 5201) iperf3 -c <服务器IP地址> -p 1234 # 持续测试 60 秒 iperf3 -c <服务器IP地址> -t 60 # 使用特定的网卡接口 # 在服务器端: iperf3 -s -B <服务器IP地址> # 在客户端: iperf3 -c <服务器IP地址> -B <客户端IP地址> # 测试 UDP 带宽(常用于模拟流媒体) iperf3 -c <服务器IP地址> -u -b 1G # -b 指定目标带宽,1Gbps
结果解读:
重点关注 SUM 行的 receiver 和 sender 部分。

receiver: 表示接收方测得的吞吐量。sender: 表示发送方测得的吞吐量。bits/sec: 这是最重要的指标,即带宽。sender和receiver的值应该非常接近,如果差异巨大,说明网络存在问题。
netperf - 功能更全面
netperf 提供了比 iperf 更多的测试类型,如 TCP_RR, TCP_CRR, UDP_RR 等,非常适合测试 RPC、数据库等应用的性能。
安装:
# CentOS/RHEL/Fedora sudo yum install netperf # Debian/Ubuntu sudo apt-get install netperf
使用方法: 同样分为客户端和服务器端。
服务器端:
netserver
客户端:
# 测试 TCP 吞吐量 netperf -H <服务器IP地址> -t TCP_STREAM # 测试 UDP 吞吐量 netperf -H <服务器IP地址> -t UDP_STREAM # 测试 TCP 请求/响应延迟 netperf -H <服务器IP地址> -t TCP_RR -- -r 1,1
延迟与丢包测试工具
ping - 最基础的工具
用于测试两台主机之间的基本连通性和往返时间。
ping -c 4 <目标IP地址> # 发送 4 个包后退出 ping -i 0.2 <目标IP地址> # 设置包发送间隔为 0.2 秒
结果解读:
time=XX ms: RTT 值。packet loss: 丢包率。
traceroute / mtr - 路径诊断
这两个工具可以显示数据包到达目标主机的路径,并逐跳显示延迟和丢包情况,有助于定位网络瓶颈。
traceroute:
traceroute <目标IP地址或域名>
mtr (My Traceroute) - 更强大的替代品:
mtr 将 ping 和 traceroute 结合起来,并提供实时统计,非常实用。
# 安装 sudo yum install mtr # 或 sudo apt-get install mtr # 使用 mtr <目标IP地址或域名>
结果解读:
Loss%: 每一跳的丢包率。Avg,Best,Worst: 平均、最好、最差的延迟。- 如果某个节点的
Loss%很高或Avg值突然增大,说明那里就是瓶颈。
系统级网络性能诊断工具
nload - 实时流量监控
一个基于 curses 的实时网络带宽监控工具,可以直观地看到当前网卡的入站和出站流量。
安装:
# CentOS/RHEL/Fedora sudo yum install nload # Debian/Ubuntu sudo apt-get install nload
使用:
nload
使用左右箭头键可以在不同网卡间切换。
iftop - 按连接/主机排序的流量监控
iftop 显示哪些主机正在与你的机器通信,以及它们的带宽使用情况。
安装:
# CentOS/RHEL/Fedora (需要 EPEL 源) sudo yum install iftop # Debian/Ubuntu sudo apt-get install iftop
使用:
iftop -i <网卡接口, 如 eth0>
结果解读:
=>: 发送流量。<=: 接收流量。TOTAL: 总流量。- 按
s键可以查看源/目标主机的端口信息。
bmon - 带宽监控器
bmon 是另一个优秀的实时带宽监控和速率估算工具。
安装:
# CentOS/RHEL/Fedora (需要 EPEL 源) sudo yum install bmon # Debian/Ubuntu sudo apt-get install bmon
使用:
bmon
完整的测试流程示例
假设我们要测试 Server A (192.168.1.10) 和 Server B (192.168.1.20) 之间的网络性能。
目标: �量双向带宽、延迟和丢包率。
环境: 两台服务器通过一根网线直连,防火墙已关闭。
步骤 1: 准备工作 在 Server A 和 Server B 上都执行:
# 关闭防火墙 (以 firewalld 为例) sudo systemctl stop firewalld sudo systemctl disable firewalld # 检查网卡驱动和状态 ethtool -i eth0 ip link show eth0
步骤 2: 带宽测试 (使用 iperf3)
-
在 Server B (192.168.1.20) 上作为服务器运行:
iperf3 -s
输出:
----------------------------------------------------------- Server listening on 5201 -
在 Server A (192.168.1.10) 上作为客户端运行,测试下载带宽(A -> B):
iperf3 -c 192.168.1.20 -t 30
记录下
receiver端的bits/sec值。 -
在 Server A (192.168.1.10) 上作为客户端运行,测试上传带宽(B -> A):
iperf3 -c 192.168.1.20 -t 30 -R
记录下
receiver端的bits/sec值(这实际上是服务器的上传速度,即 A 的下载速度)。 -
在 Server A (192.168.1.10) 上运行双向测试:
iperf3 -c 192.168.1.20 -P 8 -t 30
-P 8表示使用 8 个并行线程,可以更好地利用多核 CPU 和网络带宽。
步骤 3: 延迟与丢包测试
-
在 Server A 上 ping Server B:
ping -c 100 192.168.1.20
查看平均
time和packet loss。 -
在 Server A 上运行 mtr:
mtr 192.168.1.20
让它运行一段时间(如 2-3 分钟),观察每一跳的
Loss%和Avg延迟,看是否有异常。
步骤 4: 持续监控
在进行 iperf3 测试的同时,可以在另一台服务器的终端上打开 nload 或 iftop,实时观察流量是否达到预期值。
# 在 Server B 上 nload -i eth0
步骤 5: 结果分析与调优
- 带宽不达标:检查网线质量(建议使用 Cat6/Cat6a 以上)、网卡是否协商到正确的速率(
ethtool eth0查看 Speed)、CPU 是否成为瓶颈(top查看)。 - 延迟高/丢包:检查网线、网卡驱动、系统中断是否均衡(
cat /proc/interrupts),对于虚拟机,检查虚拟化平台(如 VMware, KVM)的网络设置。 - CPU 占用高:可能是网卡中断处理能力不足,可以尝试开启
irqbalance服务或手动将网卡中断绑定到特定 CPU 核心(affinity)。
高级/自动化测试
对于更复杂的场景,你可能需要考虑:
flent: 一个强大的、基于 Python 的网络性能测试工具,可以生成精美的图表,并集成多种测试脚本(如netperf,ping等)。ttcp: 一个非常古老的简单吞吐量测试工具,但依然在某些场景下被使用。- 自动化脚本: 编写 Shell 脚本,结合
iperf3和ssh,在多台机器之间自动执行测试并收集结果。
希望这份详细的指南能帮助你全面了解和进行 Linux 网络性能测试!
