人人都会AI编程

20.5 网络性能分析

更新时间:2026-07-12

网络问题往往表现得不够直观——服务响应慢、连接超时、丢包断流,可能的原因分布在链路、带宽、延迟、协议栈配置甚至是应用本身。本节从最常用的工具和思路出发,帮助你快速定位网络性能瓶颈。

1. 基础连通性、延迟与丢包

ping
最基础的工具,用于测试目标是否可达,并获得往返延迟(RTT)和丢包率。

ping -c 100 192.168.1.1
  • 关注 time= 的数值稳定性,如果时高时低(jitter 大),可能影响实时应用。
  • 丢包率直接表明链路质量。局域网内应为 0%;互联网上偶尔出现 1% 以内的丢包尚可接受,持续偏高则需要排查。

mtr(My Traceroute)
pingtraceroute 结合在一起,能实时显示到目标沿途每一跳的丢包率和延迟分布,比单独执行 traceroute 更直观。

mtr -r -c 100 8.8.8.8   # 报告模式
mtr 8.8.8.8             # 交互界面,实时刷新
  • 如果丢包在中间某跳开始突然上升并持续到终点,故障点很可能就在那一跳。
  • 中间节点偶尔对 ICMP 限速而导致丢包不计入最终结果,需关注最终跳的丢包率。

2. 带宽与吞吐量测试

iperf3
用于测量两台机器之间的实际 TCP/UDP 带宽,是验证链路速率和发现瓶颈的权威工具。

# 服务端
iperf3 -s

# 客户端(TCP 测试)
iperf3 -c 192.168.1.10 -t 30

# UDP 测试(指定带宽,观察丢包和抖动)
iperf3 -c 192.168.1.10 -u -b 1000M -t 30
  • 如果测试值远低于网卡标称速率,检查交换机/网线协商速率、CPU 瓶颈、防火墙/限速策略。
  • 并行连接测试(-P 4)可以验证是否受单个 TCP 流窗口限制。

3. 连接状态与流量实时观察

ss(socket statistics)
取代 netstat 的现代工具,用于查看系统中所有套接字的详细状态。

ss -s          # 总体统计
ss -tlnp       # 查看所有监听端口
ss -tanp       # 查看所有 TCP 连接(包括状态)
  • TIME_WAIT 连接数过多可能导致源端口耗尽,需调整内核参数或使用连接池。
  • SYN_RECV 堆积可能暗示 SYN flood 攻击或应用处理过慢。

iftop
实时按连接对显示网络流量,类似 top 的网络版,适合快速发现哪台主机或哪个端口占满带宽。

iftop -i eth0
  • 界面直接显示源/目标 IP 和瞬时速率,无需抓包分析。

nload / nethogs

  • nload 显示进出总带宽的实时曲线。
  • nethogs 按进程显示带宽占用,定位是哪款应用在大量传输数据,例如 nethogs eth0

4. 网卡与驱动层信息

ethtool
查看和修改网卡参数,检查物理层状态。

ethtool eth0
  • 确认 Speed 和 Duplex 是否与交换机一致(如 1000Mb/s Full),半双工或速率不匹配会严重降低性能。
  • ethtool -S eth0 查看网卡级别的统计计数器,如丢包、错误、队列溢出等硬件层细节。

5. 协议栈微观分析与抓包

tcpdump
当工具表面信息不足时,需要对数据包本身进行分析。

tcpdump -i eth0 -nn port 80
tcpdump -i eth0 -w capture.pcap    # 保存后用 Wireshark 分析
  • 检查 TCP 握手是否正常(SYN/SYN-ACK/ACK),以及重传(Dup ACK、Retransmission)情况。
  • 频繁重传是网络质量差或带宽瓶颈的典型信号;窗口停滞说明接收端处理慢或内存不足。

6. 综合系统级网络统计

sar -n DEV / sar -n EDEV
从 sysstat 包中查看历史及实时的网络活动。

sar -n DEV 1    # 每秒输出各网卡流量和包量
sar -n EDEV 1   # 显示各网卡的错误统计
  • rxdrop/stxdrop/s 持续大于 0,说明软中断或应用收包不及时导致丢包,需要增大 ring buffer(ethtool -G)或优化中断绑定。

7. 延迟与阻塞分析

tc qdiscqperf 等更专业工具可以测试端到端延迟和抖动。日常诊断中,可结合以下思路:

  • ping 测 RTT,用 iperf3 验证空闲带宽,用 ss 检查 socket 队列。
  • 若延迟大但带宽充足,检查是否有流量整形规则(tc -s qdisc),或检查防火墙连接跟踪表是否满(conntrack -S)。
  • 对 Web 服务,关注 TIME_WAIT 回收是否及时、TCP_NODELAY 是否关闭等应用级配置。

实用诊断顺序建议

遇到“网络慢”的模糊反馈时,可以按以下路径快速排查:

  1. pingmtr 确认是否延迟高、丢包严重。
  2. ethtool 确认链路协商正常。
  3. iftopnload 检查带宽是否被大流量占满。
  4. iperf3 测试纯网络吞吐量,排除应用层干扰。
  5. ss -ssar -n EDEV 查看系统级错误和状态堆积。
  6. 必要时 tcpdump 抓包分析 TCP 重传和窗口行为。

这套组合不依赖昂贵的设备或闭源软件,仅用 Linux 自带的工具就能解决绝大多数网络性能问题,是服务器端运维和调试的必备技能。