睿诚科技协会

Linux网络性能测试该关注哪些核心指标?

测试前准备与核心概念

在开始测试之前,明确以下几点至关重要:

Linux网络性能测试该关注哪些核心指标?-图1
(图片来源网络,侵删)

明确测试目标

  • 带宽测试:测试网络能达到的最大理论吞吐量,类似于测试公路的“车道数”。
  • 延迟测试:数据包从发送到接收所需的时间,类似于汽车通过收费站的时间。
  • 丢包率测试:在特定负载下,丢失数据包的百分比,类似于公路堵塞导致车辆无法通行。
  • 并发连接测试:系统能同时处理多少个活跃的网络连接。
  • 应用层性能测试:模拟真实应用(如 HTTP, MySQL)的性能。

测试环境

  • 隔离环境:最佳实践是在一个独立、无干扰的网络环境中进行测试,以排除其他流量的影响,使用一根直通网线直接连接两台机器是获取最纯净结果的方法。
  • 硬件规格:记录下测试机器的网卡型号(如 Intel X710)、CPU、内存等,网络性能瓶颈可能在 CPU、内存或网卡本身。
  • 系统配置
    • 关闭防火墙sudo systemctl stop firewalldsudo ufw disable
    • 关闭 SELinuxsudo 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

使用方法: 测试分为客户端和服务器端。

Linux网络性能测试该关注哪些核心指标?-图2
(图片来源网络,侵删)

在服务器端(接收端)运行:

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 行的 receiversender 部分。

Linux网络性能测试该关注哪些核心指标?-图3
(图片来源网络,侵删)
  • receiver: 表示接收方测得的吞吐量。
  • sender: 表示发送方测得的吞吐量。
  • bits/sec: 这是最重要的指标,即带宽。
  • senderreceiver 的值应该非常接近,如果差异巨大,说明网络存在问题。

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) - 更强大的替代品: mtrpingtraceroute 结合起来,并提供实时统计,非常实用。

# 安装
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

    查看平均 timepacket loss

  • 在 Server A 上运行 mtr:

    mtr 192.168.1.20

    让它运行一段时间(如 2-3 分钟),观察每一跳的 Loss%Avg 延迟,看是否有异常。

步骤 4: 持续监控 在进行 iperf3 测试的同时,可以在另一台服务器的终端上打开 nloadiftop,实时观察流量是否达到预期值。

# 在 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 脚本,结合 iperf3ssh,在多台机器之间自动执行测试并收集结果。

希望这份详细的指南能帮助你全面了解和进行 Linux 网络性能测试!

分享:
扫描分享到社交APP
上一篇
下一篇