企业级Linux网络性能测试完全指南
网速、丢包与延迟的实战方法论
一、测试框架与前置准备
1.1 场景定义与基准指标
1.2 环境准备清单
# 系统资源检查
top -bn1 | head -20 # CPU/内存占用
ip addr | grep -E "state UP"# 网卡状态确认
ethtool eth0 | grep Speed # 网卡速率协商
# 工具安装(CentOS/RHEL)
yum install -y iperf3 mtr tcping
yum install -y epel-release && yum install -y speedtest-cli
# 工具安装(Ubuntu/Debian)
apt-get install -y iperf3 mtr tcptraceroute
apt-get install -y speedtest-cli
二、吞吐量测试(网速)
2.1 内网测试:iperf3(企业级首选)
服务端部署
# 后台启动,绑定特定网卡(多网卡服务器建议指定)
iperf3 -s -D -B 192.168.1.100
# 验证启动
ss -tlnp | grep iperf3
客户端测试矩阵
| | |
| iperf3 -c 192.168.1.100 | |
| iperf3 -c 192.168.1.100 -t 60 -P 8 | |
| iperf3 -c 192.168.1.100 -t 30 -P 16 -w 256K | |
| iperf3 -c 192.168.1.100 -u -b 10G -t 30 | |
结果解读要点
[SUM] 0.00-30.00 sec 35.2 GBytes 10.0 Gbits/sec 0 sender
[SUM] 0.00-30.00 sec 35.2 GBytes 10.0 Gbits/sec receiver
- • 重传数(Retr):TCP测试中出现重传即存在丢包
- • 抖动(Jitter):UDP测试中>10ms影响实时业务
2.2 外网测试:speedtest-cli
# 快速测试
speedtest-cli --simple
# 指定国内节点(避免国际链路波动)
speedtest-cli --list | grep -i "shanghai\|beijing\|guangzhou"
speedtest-cli --server 6715 # 以上海电信为例
2.3 应急测试:curl
# 精确计算(排除磁盘IO影响)
curl -o /dev/null -w "\
DNS解析: %{time_namelookup}s\n\
TCP建立: %{time_connect}s\n\
首字节: %{time_starttransfer}s\n\
总耗时: %{time_total}s\n\
平均速度: %{speed_download}/s\n" \
http://speedtest.tele2.net/100MB.zip
三、丢包诊断
3.1 快速检测:ping
# 标准ICMP测试(100包,1秒间隔)
ping -c 100 -i 1 192.168.1.100
# MTU探测(检测分片问题)
ping -c 10 -s 1472 -M do 192.168.1.100 # 禁止分片
ping -c 10 -s 8972 -M do 192.168.1.100 # 测试巨帧
3.2 路径追踪:mtr(核心工具)
基础用法
# 实时模式(Ctrl+C停止)
mtr 192.168.1.100
# 报告模式(推荐用于存档)
mtr -r -c 100 -n 8.8.8.8 > mtr_report_$(date +%Y%m%d_%H%M).txt
# TCP模式(绕过ICMP封锁)
mtr -T -P 443 -n www.example.com
mtr输出解析
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 100 0.5 0.6 0.3 1.2 0.1
2.|-- 10.0.0.1 0.0% 100 1.2 1.5 1.0 3.4 0.3
3.|-- ??? 100.0 100 0.0 0.0 0.0 0.0 0.0
4.|-- 172.16.0.1 5.0% 100 10.2 15.3 9.8 45.6 5.2
- • Loss%突增点:第3跳100%丢包但后续正常,通常是路由器禁ping,非真实丢包
- • 延迟跃升点:第4跳延迟从1.5ms跳至15ms,该节点为瓶颈
- • 持续丢包:若某跳之后所有下游节点均丢包,该跳即为故障点
3.3 TCP层测试:tcping
# 测试业务端口连通性
tcping -c 100 -p 3306 db-server.internal
tcping -c 100 -p 443 api.example.com
# 统计输出(类似ping格式)
tcping -c 10 -t 1 192.168.1.100 22
四、延迟测试与优化
4.1 延迟分层测试
# L2延迟(同交换机)
ping -c 100 <同网段IP>
# L3延迟(跨路由)
ping -c 100 <跨网段IP>
# 应用层延迟(含协议栈)
curl -w "TTFB: %{time_starttransfer}\n" -o /dev/null -s http://target/
4.2 高并发延迟测试脚本
#!/bin/bash
# network_stress_test.sh - 企业级网络压力测试
SERVER_IP="${1:-192.168.1.100}"
SCENARIO="${2:-medium}"# small/medium/large
case$SCENARIOin
small)
DURATION=45
STREAMS=8
BANDWIDTH="1G"
;;
medium)
DURATION=90
STREAMS=20
BANDWIDTH="5G"
;;
large)
DURATION=180
STREAMS=40
BANDWIDTH="10G"
;;
esac
LOG_FILE="/var/log/nettest_$(date +%Y%m%d_%H%M%S).log"
echo"=== 测试配置 ===" | tee -a $LOG_FILE
echo"目标: $SERVER_IP | 场景: $SCENARIO | 并发: $STREAMS | 时长: ${DURATION}s" | tee -a $LOG_FILE
# TCP压力测试
echo -e "\n=== TCP吞吐量测试 ===" | tee -a $LOG_FILE
iperf3 -c $SERVER_IP -t $DURATION -P $STREAMS -i 5 -f g 2>&1 | tee -a $LOG_FILE
# UDP抖动测试
echo -e "\n=== UDP抖动测试 ===" | tee -a $LOG_FILE
iperf3 -c $SERVER_IP -u -b $BANDWIDTH -t $DURATION -P $STREAMS -i 5 2>&1 | tee -a $LOG_FILE
# 延迟采样(后台并行)
echo -e "\n=== 延迟采样 ===" | tee -a $LOG_FILE
ping -c $DURATION -i 1 $SERVER_IP | tail -5 | tee -a $LOG_FILE
echo -e "\n日志保存: $LOG_FILE"
五、问题排查决策树
网速异常
├── 单服务器慢
│ ├── 网卡协商速率低 → ethtool检查/更换网线
│ ├── CPU软中断高 → 开启RPS/XPS或升级网卡
│ └── 应用层限制 → 检查nginx/mysql配置
├── 同网段慢
│ ├── 交换机端口限速 → 检查交换机配置
│ └── 广播风暴 → 开启STP/排查环路
└── 跨网段慢
├── 路由器负载高 → 扩容或优化路由
└── 安全设备瓶颈 → 检查防火墙/IPS性能
丢包异常
├── 规律性丢包(固定间隔)
│ └── 链路物理故障 → 光模块/网线排查
├── 随机性丢包
│ ├── 缓冲区溢出 → 调整网卡ring buffer
│ └── 拥塞丢包 → QoS策略调整
└── 特定方向丢包
└── 不对称路由/ACL拦截 → 检查路由表与防火墙
延迟异常
├── 基础延迟高
│ ├── 物理距离远 → 优化拓扑/部署边缘节点
│ └── 介质质量差 → 更换光纤/双绞线
└── 抖动大
├── 队列调度问题 → 启用fq_codel
└── 多路径负载不均 → 调整ECMP策略
六、关键检查命令速查
| | |
| ethtool eth0 | grep Speed | |
| ethtool -S eth0 | grep -E "error|drop" | |
| netstat -s | grep -i "drop|overflow" | |
| ss -s | |
| ip route get <dst> | |
| iftop -i eth0 -P | |
七、测试规范建议
- 1. 基线建立:新环境上线前执行全套测试,存档作为对比基准
- 2. 周期巡检:核心链路每周mtr检测,每月iperf3压力测试
- 4. 监控联动:将测试脚本集成到Zabbix/Prometheus,实现自动化基线比对