lscpu | grep "Core(s) per socket"
或查看 /proc/cpuinfo
中的 cpu cores
字段。 ,2. **Windows系统**:任务管理器 > 性能 > CPU > 查看”内核”数(非逻辑处理器),物理核数通常少于逻辑处理器总数。在虚拟机环境中查看实际物理CPU核心数(非虚拟分配的vCPU数)需要穿透虚拟化层获取底层硬件信息,以下是针对不同虚拟化平台和操作系统的详细方法:
为什么需要区分物理核与vCPU?
- 物理核心 (Physical Cores):宿主机的真实CPU核心数量。
- vCPU (Virtual CPU):虚拟机分配到的虚拟处理器数量(可能超线程分割)。
- 关键区别:1个物理核可能被虚拟化为多个vCPU(如通过超线程),虚拟机内看到的CPU信息通常是vCPU数量,需特殊方法获取宿主物理核数。
通用方法:通过操作系统命令
Windows 虚拟机
-
使用系统信息工具:
- 按
Win + R
输入cmd
打开命令提示符 - 执行:
systeminfo | findstr /C:"Physical Processor(s)"
- 注意:此命令显示宿主机的物理CPU数量(需VMware Tools/VirtIO驱动支持)
- 按
-
通过 PowerShell(推荐):
Get-WmiObject Win32_Processor | Format-List NumberOfCores, NumberOfLogicalProcessors
NumberOfCores
:物理核心总数NumberOfLogicalProcessors
:逻辑处理器总数(含超线程)
Linux 虚拟机
-
终端命令
lscpu
:lscpu | grep -E "Core(s) per socket|Socket(s)"
- 计算公式:
物理核心数 = Socket(s) × Core(s) per socket
示例输出:
Socket(s): 2
Core(s) per socket: 8
物理核总数 = 2 × 8 = 16
- 计算公式:
-
查看
/proc/cpuinfo
:cat /proc/cpuinfo | grep "cpu cores" | uniq
- 显示每个CPU插槽的物理核数,需乘以CPU插槽数获得总值。
虚拟化平台管理工具
VMware vSphere / ESXi
-
通过vCenter Web控制台:
- 选择虚拟机 → 右键”编辑设置” → 查看”CPU”配置中的 “插槽数”和”每个插槽的内核数”。
- 物理核 = 插槽数 × 每插槽内核数
-
ESXi 主机SSH查询:
esxcli hardware cpu list | grep "Cores"
直接输出宿主机的物理核心总数。
Hyper-V (Windows Server)
- PowerShell 查询宿主机:
Get-WmiObject Win32_Processor -ComputerName HOST_NAME | Select NumberOfCores
需替换
HOST_NAME
为宿主机名,要求管理员权限。
KVM/QEMU (Linux)
- 在宿主机执行:
virsh nodeinfo | grep "CPU socket(s)"
输出示例:
CPU socket(s): 2
Core(s) per socket: 12
物理核总数 = 2 × 12 = 24
常见误区与注意事项
-
虚拟机内工具限制:
- Windows任务管理器/资源监视器显示的是vCPU数量(逻辑处理器),非物理核数。
- Linux
nproc
命令返回可用vCPU数,非物理核心。
-
权限要求:
- 查询宿主机信息需管理员/root权限。
- 云服务(如AWS/Azure)通常屏蔽底层硬件信息,仅显示vCPU。
-
超线程影响:
- 若宿主机启用超线程(Hyper-Threading),
逻辑处理器数 = 物理核心数 × 2
。 - 物理核数始终≤逻辑处理器数。
- 若宿主机启用超线程(Hyper-Threading),
-
容器环境差异:
- Docker/Kubernetes中
lscpu
返回的是宿主机的CPU信息,非容器配额。
- Docker/Kubernetes中
引用说明:本文操作指南参考微软官方文档《Win32_Processor类》、VMware知识库文章KB1005及Linux内核文档proc(5),数据准确性基于x86架构虚拟化环境验证。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/33277.html