mtr 是定位网络延迟和丢包位置最实用的工具,能通过持续带时间戳测量识别问题跳点;netstat -s/ss -s 比 ifconfig 更能揭示协议栈层瓶颈;网卡中断绑定与 RPS 配置不当会加剧抖动;tcpdump 应在 lo 或 any 接口同步抓包以避免 offload 和过滤失真。

怎么看实时延迟和丢包率
直接用 ping 看不准,尤其在高负载或突发流量下。真正反映网络质量的是持续、带时间戳的测量结果。mtr 是最实用的工具,它融合了 traceroute 和 ping 的能力,能定位延迟突增或丢包发生在哪一跳。
运行命令:mtr -r -c 100 -i 0.2 example.com(-c 控制次数,-i 缩短间隔,避免默认 1 秒太粗糙)
- 重点关注「Loss%」列:某跳开始出现丢包,说明问题大概率出在该节点或其上游
- 看「Avg」和「StDev」:标准差大意味着抖动严重,常见于无线、QoS 不足或网卡中断风暴
- 如果第一跳(本地网关)就延迟高且不稳定,基本可排除远端问题,聚焦本机或局域网
为什么 netstat -s 或 ss -s 比 ifconfig 更有用
ifconfig 只显示收发包总数和错误计数(如 errors、dropped),但不区分原因;而 netstat -s 输出的是内核协议栈各层的统计,能暴露真实瓶颈点。
重点关注这几项:
-
TCP: InSegsvsInErrs:若后者持续增长,可能是校验失败或 IP 分片重组异常 -
UdpInErrors:非零值通常指向网卡驱动 bug、DMA 内存不足或net.core.rmem_max设置过小导致 UDP 包被静默丢弃 -
TCPSynRetrans:SYN 重传多,说明三次握手阶段就卡住,常见于防火墙拦截、目标端口未监听或 SYN Cookie 被误触发
对比 ss -s 输出更轻量,适合脚本采集,但字段粒度略粗;生产环境建议两者交叉验证。
通过大量实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术,详尽分析了近30个典型案例。 本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。 本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言扳、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播
网卡驱动与中断绑定不当会放大延迟抖动
现代多核 CPU 上,网卡中断默认可能全打到一个 CPU 核上,造成软中断(softirq)堆积,表现为 top 中 %si 持续高于 20%,同时 cat /proc/interrupts | grep eth0 显示某 CPU 计数远高于其他核。
- 用
ethtool -l eth0查看网卡支持的 RX/TX 队列数,再用ethtool -L eth0 combined 4均匀分配队列(需驱动支持) - 手动绑定中断:把每个队列对应的 IRQ 号写入
/proc/irq/*/smp_affinity_list,确保分散到不同物理核(避开超线程兄弟核) - 检查是否启用了
RPS(Receive Packet Steering):cat /sys/class/net/eth0/queues/rx-0/rps_cpus,若为空且 CPU 多于 1 颗,建议配置(如echo f > rps_cpus)
不做这些调整时,单核处理所有软中断会导致 TCP ACK 延迟上升、滑动窗口停滞,最终体现为应用层 RTT 波动剧烈。
为什么 tcpdump 抓包位置不对就白忙活
在服务器上直接 tcpdump -i eth0 port 80,可能根本看不到延迟源头——因为包在进入协议栈前就被丢弃(如 iptables DROP)、或在 eBPF/XDP 层被过滤、甚至被网卡 offload 功能绕过抓包点。
- 优先在
lo接口抓:确认服务进程发出的包是否本身就延迟高(比如后端调用慢) - 用
tcpdump -i any并配合-w保存,再用 Wireshark 看「Time since previous frame」列,比终端输出更准 - 若怀疑 offload 导致异常,加
-K参数禁用 checksum offload,或用ethtool -K eth0 rx off tx off临时关闭 - 关键点:抓包必须和延迟现象同步发生,用
date; ping -c 3 target; date定位时间窗,再回溯对应秒级的 pcap
很多团队花几小时分析 pcap 却漏掉一个事实:抓包点离问题发生点太远,数据本身已失真。









