0

0

Linux网络抖动问题分析_链路质量排查说明【指导】

冰川箭仙

冰川箭仙

发布时间:2026-01-04 14:28:12

|

677人浏览过

|

来源于php中文网

原创

应使用mtr --tcp -P 443测真实链路质量,因其可识别每跳TCP丢包、重传集中点与延迟突增同步性;本地抖动优先查ethtool和/proc/interrupts;ss -i与tcpdump结合定位内核或应用层问题;警惕tcp_sack等配置掩盖真实丢包。

linux网络抖动问题分析_链路质量排查说明【指导】

怎么看实时丢包和延迟抖动

直接用 ping 看不准,尤其在高负载或低优先级队列场景下,ICMP 包可能被内核丢弃或延迟调度。真正反映应用层链路质量的是 tcping 或基于真实 TCP 连接的探测。

推荐组合:mtr --tcp -P 443 example.com(持续跟踪每跳的 TCP 丢包与延迟),比单纯 ping 多出三个关键信息:每跳是否真丢包、重传是否集中在某一段、延迟突增是否同步出现。

  • 避免只看首尾两跳 —— 中间运营商设备常开启 ICMP rate-limit,ping 显示“全通”但实际 TCP 流量卡在第5跳
  • mtr 默认用 ICMP,加 --tcp 才走真实端口路径,否则测的不是业务走的链路
  • 如果 mtr 某跳显示 “???” 但后续跳正常,大概率是该节点禁 ICMP 回复,不是故障,别误判

怎么查本机网卡驱动和队列是否异常

网络抖动常源于本地网卡驱动 bug、RX/TX 队列溢出或中断绑定不均,而不是远端问题。先确认硬件层是否稳定。

执行以下命令快速筛查:

ethtool -S eth0 | grep -E "(drop|overrun|error|reset)"
cat /proc/interrupts | grep eth0
cat /sys/class/net/eth0/queues/*/rps_cpus
  • rx_missed_errors 持续增长 → RX ring buffer 溢出,需调大 net.core.rmem_max 或启用 GRO/LRO
  • 同一 CPU 核上 eth0-TxRx- 中断数远高于其他核 → 中断未均衡,用 echo 0f > /sys/class/net/eth0/queues/rx-0/rps_cpus 手动分散(值按实际 CPU mask 调整)
  • tx_aborted_errors 非零且递增 → 物理链路不稳(光纤弯折、模块温度高、对端协商失败),不是软件问题

怎么判断是内核协议还是应用层导致抖动

抖动出现在建立连接后?还是仅首次 SYN 就超时?用 ss -itcpdump 对比时间戳能快速定位分界点。

Spell.tools
Spell.tools

高颜值AI内容营销创作工具

下载

例如发现业务请求 RTT 在 20ms~800ms 波动,运行:

ss -i dst 10.0.1.100:8080
tcpdump -i eth0 'host 10.0.1.100 and port 8080' -w debug.pcap -c 1000
  • ss -i 输出中 rtt 值本身波动大 → 内核 TCP 栈已感知链路不稳定(如乱序、重复 ACK 多),重点查 BBR/CUBIC 拥塞控制行为或 net.ipv4.tcp_rmem 设置
  • tcpdump 显示 SYN 重传间隔从 1s → 2s → 4s → 8s → 放弃 → 说明问题在连接建立阶段,和防火墙拦截、SYN cookie 触发、或对端 SYN 队列满(net.ipv4.tcp_max_syn_backlog)有关
  • 抓包里看到大量 DUP-ACK 但无重传 → 对端接收窗口卡住,检查对方机器的 ss -i 和内存压力

哪些配置会掩盖真实抖动、让排查变难

很多默认配置会让抖动“看起来不严重”,实则恶化底层问题。比如开启 net.ipv4.tcp_sack 后丢包恢复快,但掩盖了物理层频繁丢包;又比如 net.ipv4.tcp_slow_start_after_idle=0 让长连接持续高速发包,反而压垮中间小带宽节点。

  • net.ipv4.tcp_timestamps=1 开启时,若对端不支持或中间设备篡改时间戳,会导致连接反复重置(tcp_invalid_timestamp 计数上升)
  • net.core.netdev_budget 设为太小(如默认300)→ 软中断处理不及时,RX 队列堆积,表现为偶发 100ms+ 延迟尖刺
  • 使用 systemd-networkd 时,默认关闭 IPv6 RA 可能导致某些云厂商元数据服务超时重试,间接拉高整体延迟毛刺

抖动问题最麻烦的不是找不到原因,而是多个微小配置叠加后相互干扰 —— 比如 RPS + TSO + GRO 全开时,在特定流量模式下会产生非线性延迟抖动,必须关掉一个再对比测试。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6417

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

343

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

409

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号