0

0

Linux 带宽占满但业务无异常的原因

冷炫風刃

冷炫風刃

发布时间:2026-01-29 16:16:02

|

792人浏览过

|

来源于php中文网

原创

top和htop看不到带宽占用进程,因其不采集网络I/O数据;真实原因包括iptables转发、AF_PACKET抓包、eBPF程序、容器桥接绕过协议栈等,需用nethogs、ss、tc、bpftool等工具分层排查。

linux 带宽占满但业务无异常的原因

为什么 tophtop 看不到带宽占用进程

因为 tophtop 只显示 CPU、内存、进程状态等指标,不采集网络 I/O 数据。带宽打满但业务响应正常,往往意味着流量是“流经”系统而非“消耗”在本地——比如服务器作为透明代理、NAT 网关、或开启了 iptables 转发且未限速;又或者容器桥接模式下,流量绕过主机协议(如使用 hostNetwork: true 的 Pod),导致 /proc/net/dev 有计数,但 ss -inetstat 查不到对应 socket 所属进程。

如何定位真实发包/收包进程

ss -tunlp 查监听端口和所属 PID,但注意:它只显示有 socket 绑定的连接;对于纯转发(如 iptables -j DNAT)、AF_PACKET 抓包(如 tcpdumpsuricata)、或 eBPF 程序(如 cilium 的 datapath),需换方法:

  • 运行 sudo cat /proc/net/dev 确认哪个网卡(如 eth0)RX/TX 持续高位,再用 sudo tc -s class show dev eth0 看是否有 qdisc 限速或队列堆积
  • sudo nethogs -t 实时按进程统计带宽,它基于 libpcap 抓包解析,能捕获转发流(但会引入轻微性能开销)
  • 检查是否启用 nf_conntrack:高并发短连接可能让 conntrack 表爆满,导致内核大量重传或伪造 ACK,表现为“带宽占满却无业务报错”,此时 cat /proc/sys/net/nf_conntrack_count 接近 /proc/sys/net/nf_conntrack_max

iptables FORWARD 链规则引发的隐性带宽消耗

若服务器启用了 ip_forward=1,且 iptables -t filter -L FORWARD 中存在大量 LOG 目标规则(如调试遗留),每条匹配日志都会触发内核写入 dmesg 缓冲区,而 rsyslogjournald 实时读取这些日志时,会反复调用 recvfrom()/dev/logAF_UNIX socket 收包——这本身就会产生可观的环回流量,并被计入 lo 接口统计,误判为“业务流量”。

QIMI奇觅
QIMI奇觅

美图推出的游戏行业广告AI制作与投放一体化平台

下载
  • 临时禁用 LOG 规则:sudo iptables -t filter -D FORWARD -m state --state RELATED,ESTABLISHED -j LOG
  • 确认日志速率:dmesg -T | tail -50 | grep "IN=" 看是否高频输出网络事件
  • 更稳妥的做法是改用 nflog + 用户态收集,避免内核路径阻塞

容器或虚拟化环境下的“幽灵带宽”

在 Kubernetes 或 KVM 场景中,docker0cni0virbr0 等网桥接口的流量常被忽略。例如:calico 使用 BPF 程序做策略路由,其数据平面绕过 netfilter,iptables -t nat -L POSTROUTING 看不到 SNAT 规则,但 tc filter show dev cali+ 可能显示大量匹配动作;又如 QEMU 启用 vhost-net 后,virtio-net 发包直接进内核 vhost 内存区,不经过常规 socket 路径。

  • 查桥接流量:watch -n1 'cat /sys/class/net/docker0/statistics/{rx,tx}_bytes'
  • 查 eBPF 程序:bpftool prog list | grep -E "(tc|classifier|xdp)"
  • 检查是否启用 net.ipv4.conf.all.forwarding=1 且未配 rp_filter,导致反向路径校验失败后持续丢包重传

真正难排查的是那些不走 socket、不记 conntrack、也不触发 iptables 日志的路径——比如 DPDK 应用、SR-IOV VF 直通、或内核模块自定义 sk_buff 处理。这时候得看 /proc/interrupts 是否某 CPU 核中断飙升,再结合 perf record -e irq:softirq_entry -a sleep 10 定位软中断来源。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1130

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

213

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1730

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

20

2026.01.19

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

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

397

2023.07.18

堆和栈区别
堆和栈区别

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

575

2023.08.10

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

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

397

2023.07.18

堆和栈区别
堆和栈区别

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

575

2023.08.10

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

13

2026.01.29

热门下载

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

精品课程

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

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

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

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