我在 Windows 2016 标准主机上使用 Hyper-V-Guest(SLES 系统)时遇到了问题。在 Hyper-V 中,我为这台机器分配了 120000MB 内存。但如果我free -m
在 SLES 客户端中输入,我会得到以下输出:
total used free shared buffers cached Mem: 67961 2038 65923 219 11 807 -/+ buffers/cache: 1219 66742 Swap: 122879 0 122879
所以只有 66 GB RAM。
我尝试打开/关闭动态内存、NUMA、更改 NUMA 参数,但没有成功。有一次,显示有更多内存free -m
,但重启后我又遇到了同样的问题。
在 Windows 主机上,内存已被分配,因此如果我启动虚拟机(此主机上没有其他虚拟机),我会看到正在使用 124/256 GB。
此刻我没有什么主意。
编辑:我以相同设置作为客户机启动了一台 Ubuntu 机器,它显示了正确的 RAM 数量。我以 vmWare 映像的形式获取了 SLES VM,并将磁盘文件转换为 Hyper-V。我现在升级了 SLES 系统,它用普通内核替换了 vmWare 特定内核(如果我没看错的话),但问题仍然相同。
答案1
有时在网上发布问题会给人带来一些新的想法。
我在Linux日志中发现以下消息:
dmesg | grep -i memory WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losng 51008MB of RAM
我不知道是微软提供的 Hyper-V-BIOS 有问题,还是 Linux 出了问题,或者是两者兼而有之。问题是 MS-stack 是最新的,我无法升级 Linux 内核,因为 VM 中运行的软件需要此版本。
解决方法:我没有增加 RAM,而是将其减少到 40GB。这不会触发 Linux 错误消息。当我启动要在 VM 中运行的业务应用程序时,Hyper-V 会动态地为虚拟机分配更多内存(在我的情况下最多 105GB),而不会出现问题。太棒了!