0

0

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

冷炫風刃

冷炫風刃

发布时间:2026-01-30 21:06:33

|

583人浏览过

|

来源于php中文网

原创

top和htop看不到带宽占用进程,因其不统计网络I/O;真正瓶颈常在网络收发队列或内核协议栈,需用ss、iftop、tcpdump等工具定位发包/收包进程及连接堆积问题。

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

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

因为 top 默认只显示 CPU 和内存使用率,不统计网络 I/O。即使网卡跑满,top 里所有进程的 %CPU 可能都低于 10%,业务响应也正常——这说明瓶颈不在 CPU 或磁盘,而在网络收发队列或内核协议处理能力上。

真正要查的是:谁在持续发包?谁在大量收包?有没有连接堆积?

  • ss -ti 查每个 TCP 连接的 retrans(重传)、qsize(发送队列长度)、rcv_space(接收窗口)
  • cat /proc/net/dev 确认是 rx 还是 tx 满载;若 rx 满但应用没读包,Recv-Q 会持续增长
  • iftop -P 能按端口实时看流量归属,但需 root 权限,且默认不解析进程名(加 -P 后仍可能显示 unknown,因部分流量走内核 bypass 路径如 XDP 或 AF_XDP)

netstat -s 里哪些字段暴露真实瓶颈

netstat -s 输出的是内核网络协议栈的统计,比进程级工具更接近真相。重点盯这几个字段:

  • TCP: packets receivedpackets to unknown port 差值大 → 大量 SYN 包打到未监听端口(如被扫描或配置错端口)
  • TCPSynRetrans 高 → 客户端反复重发 SYN,可能是防火墙丢包、SYN Cookie 触发或后端服务未响应
  • tcpListenOverflows > 0 → net.core.somaxconn 不够,新连接被丢弃,但已有连接不受影响,所以业务“看似正常”
  • tcpBacklogDrop > 0 → accept 队列已满,新连接进不了用户态,但三次握手已完成,客户端以为连上了(造成假连接)

UDP 流量满带宽却查不到对应进程

UDP 无连接、无状态,内核不会为每个包维护连接上下文,ss -ulsof -iUDP 只能列出“当前绑定端口”的进程,对发完就扔的 UDP 发送方(比如监控上报、日志采集、DNS 查询)完全不可见。

万兴爱画
万兴爱画

万兴爱画AI绘画生成工具

下载

这时候得从包层面切入:

  • tcpdump -i eth0 -c 1000 udp and port not 53 抓包,看源 IP/端口分布;如果大量来自同一本地端口,大概率是某个应用批量发 UDP
  • cat /proc/net/udp 查 UDP socket 绑定状态,注意 st 字段:07 表示 ESTABLISHED(仅对有连接语义的 UDP 封装有效),多数 UDP socket 是 01(RAW)
  • 检查 /etc/cron.d/ 或 systemd timer,有些日志轮转脚本会调用 logger 发 UDP 到 127.0.0.1:514,而 rsyslog 若未启用 $SystemMaxMessageSize 限制,可能被大日志撑爆带宽

业务无异常但 softirq 占用高

执行 top1 显示所有 CPU 核,再按 shift + H 切换线程视图,找 si(softirq)列持续 >80% 的核——这说明内核正在忙于处理网络中断和协议栈任务,但用户态进程还没被拖慢。

  • cat /proc/softirqsNET_RXNET_TX 计数是否远高于其他项(比如高出 10 倍)
  • 检查网卡是否启用了 RSS(Receive Side Scaling):若只有单核处理所有 RX 中断,NET_RX 会集中在某一个 CPU 上
  • 确认是否开了 irqbalance,并检查 ethtool -l eth0 的 channel 数量是否匹配 CPU 核数;否则大量中断挤在 CPU0,softirq 成瓶颈,但业务进程调度不受直接影响

这种情况最易被忽略:带宽跑满不是因为业务逻辑在发数据,而是内核在替你“扛包”。一旦并发连接数再涨一点,或出现丢包重传,业务延迟就会突变。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
cookie
cookie

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

6429

2023.06.30

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

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

347

2023.11.23

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

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

414

2024.02.23

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

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

93

2025.08.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

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

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

精品课程

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

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

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

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