当我在 VMware 工作站中运行虚拟机时,使用几分钟后,它就用完了我所有的 RAM(16GB)。我的系统性能变得非常缓慢。Linux 客户机也会出现此问题,但 Windows 客户机的情况更糟。在 VMware Workstation 首选项中,我将保留内存设置为 2GB,并指定将所有虚拟机内存放入保留主机 RAM 中,但尽管文档建议这样做,但这并没有帮助。
有人知道当我运行客户虚拟机时如何阻止 VMware Workstation 耗尽所有 RAM 吗?
VirtualBox 没有问题,我尝试重新安装 VMware Workstation,但问题仍然存在。我本想停止使用它,但有些项目需要我使用 VMware。
以下是更多详细信息:
free -m
当我在 VMware Workstation 打开但没有客户机运行时(在启动虚拟机之前)在终端中运行时:
total used free shared buffers cached
Mem: 15945 3370 12575 198 23 696
-/+ buffers/cache: 2650 13295
Swap: 19072 74 18998
启动 Windows 10 客户机并运行几分钟后,如果我free -m
在主机中运行,我会得到:
total used free shared buffers cached
Mem: 15945 15694 251 2182 66 12158
-/+ buffers/cache: 3468 12477
Swap: 19072 74 18998
当我关闭 Windows 10 客户机并free -m
再次运行时:
total used free shared buffers cached
Mem: 15945 13499 2446 197 67 10209
-/+ buffers/cache: 3223 12722
Swap: 19072 74 18998
为了恢复我的 RAM,我必须运行:
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
然后我运行free -m
我得到:
total used free shared buffers cached
Mem: 15945 3312 12633 198 2 642
-/+ buffers/cache: 2667 13278
Swap: 19072 74 18998
系统主机和客户机规格
//////////////////////////////////////
System Host:
Ubuntu 14.04LTS
VMware Workstation 12 Pro Version: 12.1.1 build-3770994
///////////////////////////////////////
//////////////////////////////////////
VM Guest:
Windows10
RAM: 1984MB
Processors: 1
DisplayRAM: 1GB
///////////////////////////////////////
//////////////////////////////////////
Motherboard:
ASUS AMD M5 A97 R2.0
///////////////////////////////////////
///////////////////////////////////////
CPU:
AM3+ AMD FX 8320 8-Core
3.5GHz 16MB Total Cache, (5GHz Max)
///////////////////////////////////////
///////////////////////////////////////
Graphics Card:
ZOTAC Nvidia Geforce GT 730
4GB DDR3 64-bit HDCP
DUAL-Link DVI, HDMI, VGA
///////////////////////////////////////
///////////////////////////////////////
RAM: 16GB
Kingston Hyperx
2x8GB Memory Sticks
1866 DDR3 240-pin
///////////////////////////////////////
////////////////////////////////////////
POWER SUPPLY:
EVGA 1000w PS
1000GQ
80+ Gold series
///////////////////////////////////////
更新,16 年 9 月 19 日
(请注意,这是@granjow 提供的附加信息,希望能够代表 OP 的经验。)
需要澄清的是,问题不在于“可用内存”列中的数字太小,我们只是对这个数字不满意,因为数字越大越好。问题在于系统性能实际上很糟糕。
问题表现如下:启动虚拟机和一些程序后,可用内存量下降,这是意料之中的。VMware 使用的内存量远远超过配置的限制(即 10 GB 而不是 4 GB,而总共只有 8 GB 的物理 RAM)。在某个时候,两个客户机和主机在多种情况下开始冻结 > 10 秒:例如在 WebStorm 中导航文件(客户端)、打开新浏览器选项卡或终端选项卡或者只是按 Alt-Tab(主机)。
在这些情况下观察 CPU 负载时,只要系统冻结,客户机 CPU 使用率就会达到 100%,但任务管理器中没有显示任何繁忙的程序。基本上,我可以观察到系统耗尽 RAM 并大量使用磁盘作为缓存的典型症状。观察 VMware 日志时,经常会出现一行关于膨胀的字样,据说这是 VMware 非常智能的机制,它可以管理和释放客户机释放的内存。
我们不是在谈论主机的糟糕规格,因为
- 确切地同一台虚拟机一直在运行确切地在 Windows 10 上顺利运行相同的硬件,从未遇到过性能问题
- 在 Ubuntu 上的 VirtualBox 中导入的同一个虚拟机的运行效果与在 Windows 10 上的 VMware 运行效果一样好,htop/glances 显示内存使用量恒定在 4.6 GB 左右,并且完全没有死机。
答案1
你是在杞人忧天。没用过内存是浪费内存。您的系统将聪明地使用剩余的 RAM 作为缓存,根据需要加快速度。
top 是一个很好的工具 - 它能给你一些有用的信息,但更整体的可能需要采取以下方法 -iotop或类似的工具会显示这一点。我的怀疑是它的存储速度慢,而且 virtualbox 和 vmware 处理 IO 和内存使用的方式不同。“修复”可能是使用 ssd 和/或在与主系统不同的存储上运行 VM,看看是否有帮助。我的系统在 SSD 上运行,而 VM 则在一个大型 7200 rpm 磁盘上运行,尽管我曾考虑过为此购买 SSD。
答案2
您的系统实际上从未出现过内存不足的情况。无需采取任何行动。
这里发生的情况是,虚拟机正常运行导致的大量磁盘活动导致系统用缓存数据填充系统上原本未使用的内存。本质上,Linux 从磁盘获取经常或最近访问的数据(在您的情况下,主要是 VM 的虚拟磁盘读取的数据)并将副本存储在 RAM 中以提高性能。这样做是因为 RAM 比任何硬盘或闪存 SSD 都快得多。如果主机上的其他应用程序需要更多内存,系统将简单地释放一些缓存数据并将其分配给这些应用程序。
该行列出了正在使用且可供应用程序使用的实际物理内存量(忽略缓存数据)-/+ buffers/cache
。VM 运行时,您的系统剩余大约 12 GB 的可用内存,但其中大部分用于缓存数据。此行为是正常的,您无需对此采取任何措施。事实上,手动刷新缓存(使用sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
)会降低系统性能,因为系统需要访问磁盘来读取数据,而不仅仅是检索 RAM 中的副本。
系统性能缓慢可能是由于虚拟机运行时磁盘负载过高造成的。如果您使用的是机械硬盘,请考虑升级到 SSD。
有关 Linux 如何使用空闲内存缓存数据的更多信息,请访问“Linux 吞噬了我的 RAM!”。
答案3
多次重新安装操作系统和进行不同的配置后,我发布的问题缩小到主板、内存或 CPU。
我在另一个较慢的系统(第 6 代英特尔 i5,2.3GHz / 2.8GHz 处理器)中使用了相同的硬盘(顺便说一下是 SSD),使用相同的操作系统,使用相同数量的 RAM,但使用不同的存储棒,不再遇到问题。发布悬赏以引起人们对这篇 2 个月前的帖子的关注的用户可能希望对他们的硬件进行一些彻底的测试。
答案4
我的机器也出现了这个问题(32GB RAM)。VMWare 占满了所有 RAM,不久之后系统速度就急剧下降。
VMWare 填充了“缓存 RAM”——这是用作缓存的未使用 RAM。理论上,这不需要任何操作,正如 bwDraco 所写。
不幸的是,实际情况并非如此。这个问题始于 VMWare 10,早期版本没有这个问题。
可以使用 进行检查htop
。查看“Mem”的黄色条。如果此黄色条(缓存 RAM 的使用情况)位于右侧,则表示缓存已满,并且机器速度变慢。
我不知道这个问题的原因,但我有一个有效的解决方案:
使用 cron 作业我每三分钟执行一次此命令:
sh -c "sync; echo 3 > /proc/sys/vm/drop_chaces"
这将清除 VMWare 缓存,并且机器可以顺利运行,不会出现性能问题。
一种可能的解释是 VMWare 占用了所有缓存 RAM,Linux 内核没有缓存了。VMWare 永远不会释放这些内存,但 Linux 也需要一些缓存来提高运行速度。