网络问题往往表现得不够直观——服务响应慢、连接超时、丢包断流,可能的原因分布在链路、带宽、延迟、协议栈配置甚至是应用本身。本节从最常用的工具和思路出发,帮助你快速定位网络性能瓶颈。
1. 基础连通性、延迟与丢包
ping
最基础的工具,用于测试目标是否可达,并获得往返延迟(RTT)和丢包率。
ping -c 100 192.168.1.1
- 关注
time=的数值稳定性,如果时高时低(jitter 大),可能影响实时应用。 - 丢包率直接表明链路质量。局域网内应为 0%;互联网上偶尔出现 1% 以内的丢包尚可接受,持续偏高则需要排查。
mtr(My Traceroute)
将 ping 与 traceroute 结合在一起,能实时显示到目标沿途每一跳的丢包率和延迟分布,比单独执行 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/s或txdrop/s持续大于 0,说明软中断或应用收包不及时导致丢包,需要增大 ring buffer(ethtool -G)或优化中断绑定。
7. 延迟与阻塞分析
tc qdisc 与 qperf 等更专业工具可以测试端到端延迟和抖动。日常诊断中,可结合以下思路:
- 用
ping测 RTT,用iperf3验证空闲带宽,用ss检查 socket 队列。 - 若延迟大但带宽充足,检查是否有流量整形规则(
tc -s qdisc),或检查防火墙连接跟踪表是否满(conntrack -S)。 - 对 Web 服务,关注 TIME_WAIT 回收是否及时、TCP_NODELAY 是否关闭等应用级配置。
实用诊断顺序建议
遇到“网络慢”的模糊反馈时,可以按以下路径快速排查:
ping和mtr确认是否延迟高、丢包严重。ethtool确认链路协商正常。iftop或nload检查带宽是否被大流量占满。iperf3测试纯网络吞吐量,排除应用层干扰。ss -s和sar -n EDEV查看系统级错误和状态堆积。- 必要时
tcpdump抓包分析 TCP 重传和窗口行为。
这套组合不依赖昂贵的设备或闭源软件,仅用 Linux 自带的工具就能解决绝大多数网络性能问题,是服务器端运维和调试的必备技能。