linux无原生“节点”概念,实际需查numa节点或cpu插槽负载;top -1显示逻辑核而非物理节点,无法直观区分numa分布;须用lscpu、numactl、mpstat等组合命令并脚本聚合计算各numa节点cpu占用率。

直接看节点级 CPU 占用百分比,Linux 本身没有“节点”这个原生概念——你实际想查的,是物理 CPU 插槽(socket)或 NUMA 节点(node)的负载分布,而不是集群调度器里的“计算节点”。
为什么 top -1 显示的是逻辑核,不是物理节点
top 按 1 显示的是每个 logical CPU(含超线程),比如 2 路 Xeon + 16 核/路 + 超线程 = 64 行,但它们分属两个物理 socket(即两个 NUMA node)。top 不按 socket 或 node 分组,只按编号顺序列,所以你看到的 %Cpu0~%Cpu31 可能全在 node 0,而 %Cpu32~%Cpu63 全在 node 1——但你无法从 top 直观确认这点。
- 物理节点(socket)数:用
lscpu | grep "Socket(s)"查 - NUMA node 数:用
numactl --hardware | grep "available"查 - 每个 node 包含哪些逻辑核:用
numactl --hardware看node X cpus:行
用 numastat 查每个 NUMA node 的实际 CPU 使用倾向
numastat 不显示实时占用率,但它能告诉你进程在各 node 上的内存分配和页面访问倾向,间接反映 node 级负载是否均衡。真正要算某 node 的 CPU 占用百分比,得自己聚合:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 先用
numactl --hardware记下 node 0 的所有 CPU 编号(比如0-15,32-47) - 再用
mpstat -P ALL 1 1输出所有逻辑核的瞬时使用率(需安装sysstat) - 手动提取对应编号的
%usr+%sys值,取平均——这才是该 node 的近似 CPU 占用率 - 注意:
mpstat -P 0,1,2这种写法只支持连续编号,不能跨段;非连续编号必须脚本过滤
查集群环境下的“节点占用百分比”?那不是 Linux 命令的事
如果你在用 Slurm、PBS 或 LSF 这类作业调度系统,“节点占用”指该物理服务器上已分配的 CPU 核数 / 总核数,这由调度器维护,Linux 内核不感知。例如:
- Slurm:用
sinfo -N -o "%N %C",输出类似node01 12/24(12 个核正在用) - PBS:用
pbsnodes -a | grep -E "(Mom|state|pcpus)",关键字段是pcpus(总核数)和resources_assigned.ncpus - 这些值不是实时采样,而是调度器维护的分配状态,可能和
top显示的实际负载不一致
真要精确到每个 NUMA node 的实时 CPU 占用率,没有一键命令——必须靠 numactl 定义范围 + mpstat 采样 + 脚本聚合。最容易被忽略的是:逻辑核编号和 NUMA node 的映射关系不是按顺序平铺的,尤其在启用 BIOS 中的“Node Interleaving”或关闭 NUMA 时,numactl --hardware 的输出才是唯一可信依据。










