将虚拟机 (VM) 迁移到 Azure 时,一些用户报告称,在任务管理器中只能看到预期 vCPU 数量的一半,尽管硬件和设备管理器显示的 CPU 数量是正确的。本文将解释该问题的根本原因,并提供已成功实施的分步解决方案。
问题概述
在迁移了采用D4s v4大小(应有 4 个 vCPU)的 VM 后,用户观察到以下情况:
- 设备管理器正确显示 4 个 CPU。

- 任务管理器仅显示 2 个虚拟处理器。

- PowerShell (
Get-ComputerInfo) 仅报告 2 个 CPU。

这种差异可能会引发性能方面的担忧,因为 VM 似乎没有充分利用其分配的资源。
根本原因
该问题通常由超线程被禁用引起。关闭超线程后,VM 会使用物理核心而不是虚拟核心,导致任务管理器中仅显示预期 vCPU 数量的一半。
解决方案
要解决此问题,需要修改Windows 注册表,然后从Azure 门户或通过命令行重启 VM。注意:从客户机 OS 内部重启不足以使更改生效。
修复该问题的步骤
- 修改注册表项
在提升的命令提示符或 PowerShell 会话中运行以下命令:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 72 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
- 重启 VM
从Azure 门户或使用 Azure CLI 执行重启。例如:
az vm restart --name <VM_NAME> --resource-group <RESOURCE_GROUP>
- 重要:从客户机 OS 内部重启 VM(例如,通过“开始”菜单)不会应用更改。
验证
完成上述步骤后:
- 打开任务管理器并验证显示的 vCPU 数量是否正确。
- 使用 PowerShell 确认 CPU 数量:
(Get-ComputerInfo).CsProcessors
问题现在应该已解决,VM 将充分利用其分配的全部资源。
其他说明
- 此解决方案已由 Azure 支持团队成功测试和实施。
- 如果超线程是出于特定工作负载而有意禁用的,请在应用此解决方案之前咨询您的团队。
结论
此注册表修改解决了 Azure VM 的任务管理器中仅显示一半 vCPU 的问题。确保配置正确并从 Azure 门户重启 VM 对于修复生效至关重要。按照这些步骤操作,用户可以充分利用分配的 VM 资源并避免性能瓶颈。