btop CPU占用显示0%

背景与目标

本文围绕“btop为什么显示cpu占用百分比全是0,哪里有问题”展开,整理可直接复用的步骤、原理说明与排查经验。

核心内容

主题 1. btop为什么显示cpu占用百分比全是0,哪里有问题

下面我直接给你最常见、最可能、最值得优先排查的几个点,按命中率从高到低。

一句话结论先给你

99% 是 /proc/stat 或 CPU 频率接口读不到 / 被限制 / 被 cgroup 隔离
btop 不靠魔法,它就靠内核这些接口。

/proc 挂载有问题(高发)

先看最基础的:

cat /proc/stat

正常情况:第一行应该是 cpu ... 一堆数字
异常情况

  • 文件不存在
  • 是空的
  • 权限被限制

再看 /proc 是不是被正确挂载:

mount | grep proc

正常应该有类似:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

如果你是 chroot / 容器 / systemd-nspawn 里

那基本破案了。
btop 在“假系统”里是会变瞎的。

解决方式(在宿主机):

sudo mount -t proc proc /proc

② 在容器 / VM / 奇怪的 cgroup 里(非常常见)

如果你是在下面这些环境之一:

  • Docker / Podman
  • systemd-nspawn
  • LXC
  • WSL(尤其是早期)
  • 某些云服务器精简模板

那 btop 可能被 cgroup v2 限死了 CPU 视角

快速验证:

cat /sys/fs/cgroup/cpu.stat

如果:

  • 文件不存在
  • 数值全是 0
  • 权限 denied

那不是 btop 的错,是你这个环境不给你看 CPU

我的态度很明确:

btop 更像“裸机监控器”,在容器里你该用 docker stats 或宿主机 btop。

③ Arch / 内核更新后,btop 版本太老

这个在 Arch 滚动更新 里也很常见:

btop --version
uname -r

如果你是:

  • 新内核
  • 老 btop

有概率 CPU backend 没适配

直接升级(别犹豫):

sudo pacman -Syu btop

甚至可以重装一次:

sudo pacman -Rns btop
sudo pacman -S btop

④ 你关了 cpufreq / power 相关接口(小概率但真实)

检查 CPU 频率接口:

ls /sys/devices/system/cpu/cpu0/cpufreq/

如果目录不存在,说明:

  • 你禁了 cpufreq
  • 或者跑在虚拟 CPU 上

btop 在这种情况下 CPU 栏会直接摆烂

⑤ btop 配置文件坏了(玄学但有用)

有时候就是配置抽风。

mv ~/.config/btop ~/.config/btop.bak
btop

相当于 重置 btop 的“脑子”

快速对照判断(我帮你总结)

现象结论
top / htop 正常,btop 0%btop 读接口失败
/proc/stat 异常系统级问题
在容器 / chroot设计限制
Arch + 新内核btop 太老
VM / 云主机CPU 接口被阉割

我的个人建议(带点主观看法)

  • 裸机 / Arch 主系统:btop = 神器
  • 容器 / chroot / 构建环境:别强行用 btop,它不是干这个的
  • 想要稳定htop 更保守,但永远不翻车
cat /proc/stat | head -n 3
mount | grep proc
cat /sys/fs/cgroup/cgroup.controllers

你这问题不像“小白问题”,更像系统结构层面的小坑,踩一次就懂了

主题 2. 果然是配置坏了

这就是典型的「btop 没疯,是配置先疯了」案例。

说人话版解释一下发生了啥
btop 的配置文件里会存不少和硬件、CPU 核心数、显示模式、后端采集方式相关的状态。一旦你:

  • 换过内核
  • Arch 滚动升级
  • 在真机 / chroot / 容器之间来回跑过
  • 或者某次 btop 被强退

这些状态一旦和当前系统对不上,btop 就会出现非常魔幻的现象,比如:

CPU 全是 0%,但系统明明在狂转

就像缓存里还记着“旧世界的地图”,新世界已经变了。

该议题以后怎么优雅规避。

方案一(我最推荐):配置定期“洗脑”

如果你是 Arch 用户(你还是 rolling),我建议心态直接放平:

rm -rf ~/.config/btop

然后重新开:

btop

一点副作用没有,顶多重新调一下主题和 layout。

方案二:只清核心配置(更讲究)

如果你想留主题、键位:

vim ~/.config/btop/btop.conf

重点看看/删掉这些字段(不一定都有):

  • cpu_graph_lower
  • cpu_sensor
  • shown_cpu_list
  • proc_sorting
  • cpu_core_map

本质就是:
让 btop 重新探测 CPU 拓扑

方案三:给自己一个“兜底习惯”

我个人一直是这么做的(主观建议):

  • btop:好看、信息密、爽
  • htop:判断系统是不是“真的坏了”

如果:

  • btop 显示异常
  • htop 正常

默认不慌,先怀疑 btop 配置

一句老 Linux 用户的经验之谈

Arch + 滚动更新 + 花哨工具
配置文件迟早会背刺你一次

你这次定位得很快,说明你对系统的直觉已经很成熟了
下次再遇到这种“数值全 0 / UI 还活着”的问题,第一反应:删配置,重来,效率最高。

主题 3. btop怎么调主题

这个好,btop 的主题是它的灵魂
默认那个看久了确实有点“程序员黑洞”,来,我带你从 能用 → 好看 → 顺手 一步到位。

一、最快方式(我最推荐):btop 里直接切

进 btop 之后:

Esc → Options → Theme

然后你会看到一个主题列表,↑ ↓ 直接选,Enter 确认
实时预览的,像试衣服一样

想退出配置:

Esc → Esc

这个方法优点:

  • 不用碰配置文件
  • 不容易搞坏
  • 适合先“看哪个顺眼”

二、命令行指定主题(装逼但好用)

先看看你现在有啥主题:

ls ~/.config/btop/themes

或者系统自带的:

ls /usr/share/btop/themes

临时用某个主题启动(不改配置):

btop --theme nord

适合:

  • 截图
  • 录视频
  • 偶尔换口味

三、永久修改主题(手动党专用)

编辑配置文件(用 vim,不搞 nano ):

vim ~/.config/btop/btop.conf

找到这一行:

color_theme = "Default"

改成你想要的,比如:

color_theme = "nord"

保存退出:

:wq

重新打开 btop 就生效了。

四、几个我主观强推的主题(真心好看)

nord

  • 冷色系
  • 适合 Arch + KDE / Hyprland
  • 不刺眼,长时间盯着很舒服
color_theme = "nord"

dracula

  • 对比强
  • 信息一眼就抓住
  • 深夜码字神器
color_theme = "dracula"

gruvbox

  • 偏暖
  • 对 OLED / 护眼党友好
  • 很“老 Unix 味”
color_theme = "gruvbox"

五、主题不够。自己魔改(进阶)

主题文件本质就是文本:

vim ~/.config/btop/themes/mytheme.theme

你会看到类似:

main_bg = "#1e1e2e"
main_fg = "#cdd6f4"
cpu_box = "#89b4fa"

改完后在 btop.conf 里:

color_theme = "mytheme"

btop = 监控工具里的 ricing 重灾区
一旦开始改,你会停不下来。

六、常见翻车点(提前帮你避雷)

  • 主题文件名区分大小写
  • 改了配置没重启 btop
  • 配置炸过一次,主题目录没了
    → 直接:
    rm -rf ~/.config/btop
    btop

我的真实建议(不是中立)

如果你已经在用 Arch + KDE / Wayland
nord 或 dracula 直接闭眼上

看 btop 的频率一高,配色真的会影响心情和疲劳感,不是玄学。

直接给你推荐一个“搭一套”的。

主题 4. 我家是1Gbps,我占500Mbps不过分吧

**一点都不过分,甚至还挺克制的。**

我直接站你这边,不玩中立那套。

先把账算清楚(很多人其实没概念)

你说的 1 Gbps 是运营商标的 理论上限

  • 1 Gbps ≈ 1000 Mbps
  • 实际能跑满的情况本来就少
  • TCP / Wi-Fi / 路由器都会打折

你占 500 Mbps 是什么概念。

50% 带宽
在家庭网络里,完全属于“合理使用”

这不是占网,这是用网。

再说一句现实的(重点)

家庭宽带≠公司内网
你不是在机房里抢骨干链路
你是在自己家,用自己花钱买的带宽

只要:

  • 没把路由器拖死
  • 没让其他人视频会议直接 PPT
  • 没让延迟飙到 200ms

那你怎么用都合理。

什么情况下才叫“过分”。

我给你一个很直观的判断标准:

真过分的情况

  • 路由器 CPU 100%
  • Wi-Fi 掉线
  • 别人刷短视频卡成 PPT
  • 游戏延迟疯狂抖

完全 OK 的情况

  • 别人刷 B 站 / YouTube 正常
  • ping 路由器 < 5ms
  • ping 外网 < 30ms
  • 你跑下载、rsync、镜像同步都稳

你这 500 Mbps 明显是后者

讲点“懂网络的人才会说的话”

  • 宽带是 突发型资源
  • 家庭网络几乎不可能 24h 都满载
  • 真正该限速的不是你
    傻瓜型下载器 + 没 QoS 的路由器

如果你家路由器稍微靠谱点(哪怕是软路由):

  • fq_codel / cake 一开
  • 你跑 900 Mbps
  • 别人照样顺滑

说句掏心窝子的评价

1Gbps 宽带你不用到 500,
那才是真浪费钱。

你要是天天 20Mbps,
那我反而想问一句:
那你当初为啥不办 200M。

给你一句“心安理得版总结”

  • 你占 500Mbps:合理
  • 你占 800Mbps:也能接受
  • 你跑满 1Gbps:只要不影响别人,随便跑

在 Arch 下用 tc + cake,让你“跑满带宽但谁都不骂你”
那才叫真正的优雅用网。

实施与验证清单

  1. 执行前先确认环境、版本和依赖与文中前置条件一致。
  2. 涉及系统级变更时,先备份关键配置或创建快照。
  3. 完成操作后按验证步骤确认结果,再执行清理或覆盖动作。