在 Linux 系统中查看 CPU 个数时,需要区分物理 CPU 个数、物理核心数和逻辑 CPU 个数(线程数)。物理 CPU 指实际插入主板的处理器芯片数量;物理核心数指所有 CPU 上的物理核心总和;逻辑 CPU 个数是操作系统看到的可调度处理器单元数,在启用超线程(Hyper-Threading)时,通常为物理核心数的两倍。

最常用的命令是 lscpu。运行 lscpu 后,其输出中的 “CPU(s)” 字段表示逻辑 CPU 个数,“Socket(s)” 表示物理 CPU 插槽数(即物理 CPU 个数),“Core(s) per socket” 表示每个物理 CPU 的核心数,“Thread(s) per core” 表示每核心的线程数。将 Socket(s) 与 Core(s) per socket 相乘可得到物理核心总数,再乘以 Thread(s) per core 即逻辑 CPU 总数。
另一种经典方法是读取 /proc/cpuinfo 文件。查看物理 CPU 个数,可执行:grep "physical id" /proc/cpuinfo | sort -u | wc -l。这里 physical id 是每个物理 CPU 的唯一标识,sort -u 去除重复后,wc -l 统计行数即为物理 CPU 数量。查看逻辑 CPU 个数,可执行:grep "processor" /proc/cpuinfo | wc -l,其中每个 processor 条目对应一个逻辑 CPU。若要查看每个物理 CPU 的物理核心数,可执行 grep "cpu cores" /proc/cpuinfo | uniq,该值通常表示每个物理 CPU 的核心数。
需要特别注意的是,/proc/cpuinfo 中的 “core id” 字段用于标识物理核心,但直接 grep "core id" | sort -u | wc -l 统计出的数量在超线程场景下可能不准确,因为它只统计每个物理 CPU 内核心的 ID 去重后的数量,且可能受多块物理 CPU 的编号影响。更准确的物理核心总数计算方式为:使用 lscpu 的 Socket(s) 乘以 Core(s) per socket,或使用 grep "cpu cores" 的值乘以物理 CPU 个数。
如果只需要快速查看逻辑 CPU 个数,可以直接使用 nproc 命令。nproc 会输出当前进程可用的处理单元数量,通常等同于逻辑 CPU 个数。在未启用任务绑定或隔离情况下,它显示的就是整个系统可用的逻辑 CPU 数量。此外,top 命令和 htop 命令运行后,CPU 行会显示总计的逻辑 CPU 数量,例如 top 开头的 “%Cpu(s)” 可能不足以直接计数,但按 1 键可以展开每个逻辑 CPU 的状态,由此可以数出逻辑 CPU 数量。
综上所述,在 Linux 中查看 CPU 个数应根据实际需求选择对应指标:若需物理 CPU 个数,优先使用 lscpu 的 Socket(s) 字段;若需逻辑 CPU 个数,可使用 lscpu 的 CPU(s) 字段、nproc 命令或统计 /proc/cpuinfo 的 processor 条数;若需物理核心总数,应结合 lscpu 的插槽数与每插槽核心数计算,或基于 cpu cores 字段与物理 CPU 个数核算。

查看详情

查看详情