默认 htop 不显示每核负载条是因为启用树状视图且 cpu 显示设为“整体平均”,将多核使用率合并为一条横条;需在 setup 中用 cpu(非 cpu average)替换 cpu average 并保存配置,或直接写入 ~/.config/htop/htoprc 设置 left_meters=cpu 和 right_meters=cpu。

为什么默认的 htop 不显示每个 CPU 核心的负载条?
因为 htop 默认启用的是“树状进程视图”且 CPU 显示模式设为“整体平均”,它把所有核心的使用率合并成一条横向条,掩盖了单核过载而其他核空闲的真实情况。你看到 40% 的 CPU 使用率,可能是 1 个核跑满、其余 3 个核全 idle——这在高并发服务里很危险,但默认视图完全看不出。
解决方法是进入设置切换 CPU 显示粒度:
- 运行
htop - 按
F2进入 Setup 菜单 - 选中
Display options→ 翻到最下方勾选Hide kernel threads(可选,减少干扰) - 重点:在
Available meters区域,把CPU average移出左栏,把CPU(注意没有 “average” 后缀)拖进右栏的Meters列表 - 按
F10保存退出
如何让 htop 启动就显示每核负载条?
每次手动配置太麻烦,直接改用户配置文件即可。配置路径是 $HOME/.config/htop/htoprc,如果不存在就新建:
sudo mkdir -p ~/.config/htop echo "left_meters=CPU" > ~/.config/htop/htoprc echo "right_meters=CPU" >> ~/.config/htop/htoprc
注意:CPU 是精确关键词,写成 CPU0 或 CPU average 都无效;若机器有 8 核,htop 会自动渲染 8 条独立负载条,颜色实时变化,满载时变红。
补充说明:
- 如果系统启用了超线程(HT),
htop默认会把逻辑 CPU 全部列出(如 4 核 8 线程 → 显示 8 条),这是正常行为 - 想只看物理核?暂时没原生开关,得靠
taskset绑定进程后观察,htop本身不区分物理/逻辑核
htop 里看到某核长期 100%,但 top 总体 CPU 却不高,怎么回事?
这是典型的单线程瓶颈:某个进程(比如 Python 脚本、Java 应用或数据库查询)只跑在一个核上,死循环或密集计算把它榨干了,而其他核完全闲置。此时 top 显示的 “%Cpu(s)” 是全局平均值,可能只有 12.5%(1/8 核),极具误导性。
定位方法:
- 在
htop中按F6→ 选PID排序,找到占用率最高的进程 - 按
F5切换树状视图,看它是否是孤立子进程(无父进程分支) - 按
u输入用户名过滤,确认是否属于某个服务账户(如postgres、redis) - 记下 PID,执行
cat /proc/<pid>/status | grep ^Cpus_allowed_list</pid>查看绑定情况(若输出是单数字如3,说明被绑死在第 4 核)
和 mpstat 相比,htop 的多核视图有什么实际缺陷?
htop 的优势是交互快、能同时看进程+资源,但它的每核负载是采样渲染,不是精确统计;mpstat -P ALL 1 才是内核级计数器输出,数值更准,尤其适合做监控基线。
关键差异点:
-
htop的条形图刷新延迟约 1–2 秒,快速脉冲型负载( -
mpstat可导出 CSV:mpstat -P ALL 1 10 | grep -E '^[0-9]|Average' > cpu.log,htop不支持静默导出 - 某些容器环境(如 rootless Podman),
htop可能无法读取所有 cgroup CPU stats,而mpstat仍可用
真要排查瞬时毛刺或写自动化检查脚本,别只信 htop 的条——它是个好眼,但不是标尺。











