lscpu 是什么
lscpu 是 util-linux 提供的 CPU 拓扑查看工具,数据来自 /proc/cpuinfo 与 /sys/devices/system/cpu 下的信息。它把插槽数、每插槽核心数、每核心线程数、NUMA 节点、各级缓存与虚拟化标识整理成一份可读的摘要,是核对物理核与逻辑核的基础命令。排查性能问题时先看它,才能判断「CPU 不够」到底是核心数不足、超线程被当成物理核用,还是跨 NUMA 访存造成的。
基本信息
| 适用平台 | Linux,util-linux 软件包提供 |
|---|---|
| 数据来源 | /proc/cpuinfo 与 /sys/devices/system/cpu 下的 sysfs 节点 |
| 关键字段 | Socket(s)、Core(s) per socket、Thread(s) per core、CPU(s)、NUMA node(s) |
| 扩展视图 | lscpu -e 每个逻辑核一行,含所属插槽、核心与 NUMA 节点 |
| 脚本化输出 | lscpu -p 逗号分隔,lscpu -J 输出 JSON |
| 注意点 | 容器内通常显示宿主拓扑,与容器可用 CPU 无关 |
典型使用场景
- 规划并发度:进程数、线程池、压测并发都建立在真实可用核数之上
- 判断是否启用超线程:线程数是核心数的两倍时,计算密集任务不宜按逻辑核数规划
- NUMA 相关排查:内存带宽与访存延迟异常时先确认节点分布与绑定情况
- 实例规格核对:云主机声称的核数与 lscpu 输出不一致时先确认是哪一层的差异
- 性能基线记录:装机或交付时固化一份拓扑信息,便于后续对比
常用与关键字段
常用与关键字段
lscpu # 完整拓扑摘要
lscpu | grep -E 'Socket|Core|Thread|NUMA|Model name' # 只看关键行
lscpu -e | head # 每个逻辑核一行的扩展视图
lscpu -p | head # 逗号分隔输出,便于脚本解析
nproc # 进程当前可用的处理单元数,与拓扑不同
cat /sys/fs/cgroup/cpu.max 2>/dev/null # 容器配额下的可用算力限制关键字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| CPU(s) | 逻辑核总数 | 含超线程,不等于物理核数 |
| Thread(s) per core | 每核心线程数 | 为 2 表示开启了超线程,计算密集任务要打折 |
| Core(s) per socket | 每插槽物理核心数 | 乘插槽数才是物理核总数 |
| Socket(s) | 物理插槽数量 | 双路机器的 NUMA 节点常与插槽对应 |
| NUMA node(s) | NUMA 节点数 | 跨节点访存延迟明显,绑定策略要按节点规划 |
容器里 lscpu 显示的是宿主机的拓扑信息,和容器能用的 CPU 没有直接关系。容器实际可用的核数要看 cgroup 的 cpu.max 与 cpuset 配置,用 nproc 得到的结果更贴近进程真实可见的 CPU 数。
频率字段是当前值或基础频率的快照,负载变化时会浮动。要评估持续负载下的实际频率与降频情况,应使用 turbostat 或 cpupower 这类专门的观察工具。