Microsoft Azure 现在允许用户将其 32 位 Windows 操作系统迁移到 Azure。
我尝试将 32 位映像带到 Azure,但它们的总物理内存中只有 1Gb 可用内存(取决于 VM 大小)。该映像是 Windows 的全新安装,仅配置了 RDP。
使用内部部署 Hyper-V,我有 4 GB 的可用内存,其中 3.87 GB,这正是我所期望的。
我尝试了不同的选择:
- Windows 10 x32 映像
- Windows 7 x32 映像
- B2s 尺寸机器(2 核,4 GB)
- D2v3(2 核,14 GB)
- sysprep'ped/非 sysprep'ped 映像
什么都没用,我的 14 GB 或 4 GB 内存中总是只有 1 GB 可用。互联网搜索表明这可能与 BIOS 有关,但我无法访问 Azure VM 的 BIOS。有没有什么解决方案或至少可以解释这个问题?
PS 请不要建议使用 64 位 Windows 或嵌套虚拟化来回答这个问题。
更新: 感谢您对动态内存的指点。但我仍然无法解决这个问题。我使用 testlimit(来自 Sysinternals)模拟了高内存消耗,并确保 dmvsc.sys(动态内存)驱动程序正在运行,但 RAM 量从未增长。
更新: 将修复此问题的建议发布到 Azure 反馈门户。您可以在此处投票 https://feedback.azure.com/forums/223579-azure-portal/suggestions/42881949-fix-the-issue-with-1gb-ram-limit-for-32-bit-oses-r
答案1
欢迎了解 Hyper-V 和动态内存的怪癖。
Azure 中的 Hyper-V 虚拟机均使用动态内存(保留实例除外)。这意味着,Hyper-V 将不断监控需求(由本地内核报告)并为虚拟机分配所需的物理 RAM。因此,您将看到“1 Gb 可用”[此时此刻]。这是“真实”物理 RAM 映射的实际数量(加上快速增长应用程序的缓冲区)。
Windows 10 虚拟机只需要很少的 RAM 即可正常运行。在您的屏幕截图中,内存使用量目前处于空闲状态(我假设)。内存“需求”非常小,因此分配给虚拟机的 Hyper-V 机器配置的缓冲区(通常约为 15%)使用了分配最大值的约 1Gb。
缓冲区很重要:当使用动态内存时,需求突然增加(例如由于启动了资源密集型应用程序),Hyper-V 需要时间来为虚拟机分配更多 RAM。这可能是非常缓慢(取决于此主机上其他机器的需求)。缓冲区越大,虚拟机对增加的需求的反应就越好。您会看到那里的“最小”缓冲区。
提示:安装 Windows 时不应使用动态内存,它会增加安装所需的时间有些更长的时间。我猜你等了很多完成此操作所需的时间比在本地机器上要长。
一般来说,Windows 10 x32 默认应用程序最多使用 4GB 静态 RAM。PAE 可以扩展这个值,但唯一可以这样做的广泛应用程序是 Exchange Server(不在 Windows 10 下运行)和 SQL Server(企业版)。
答案2
这肯定是因为 OS 使用的内存不超过 1 GB,并且 VM 配置了动态内存。只要您运行更多需要更多 RAM 的程序,可用内存的大小就会增加。顺便说一句,对于 32 位 OS,没有必要让 VM 拥有超过 4 GB 的 RAM。操作系统本身无法处理超过 4 GB 的内存。
请注意,这只是一个假设。我自己还没有测试过。
分配内存的示例代码:
$dictionary = new-object "System.Collections.Generic.Dictionary[[Guid],[int]]"
while ($true) {
$dictionary.Add([guid]::NewGuid() , 0)
}
答案3
微软在文档中添加了以下注释:
Azure 平台对运行 32 位操作系统的 VM 施加了内存地址空间限制,其中可能只有 1GB 内存可供 VM 使用(尤其是在 Win7 或 Win10 等客户端 SKU 上),而 VM 的其余内存将在来宾 VM 中显示为保留。这是一个已知问题,我们目前没有修复的预计时间。我们建议迁移到 64 位操作系统版本。
将修复此问题的建议发布到 Azure 反馈门户。您可以在此处投票 https://feedback.azure.com/forums/223579-azure-portal/suggestions/42881949-fix-the-issue-with-1gb-ram-limit-for-32-bit-oses-r