我有一台基于 Oracle VM VirtualBox 的虚拟机 windows server 2008。我为这台机器声明了 8GB 的 RAM。
在我的主机(Windows 7)上,我有 16GB 的 RAM。当我启动虚拟机并查看主机任务管理器时,我看到分配了 8GB 的 RAM,并且为虚拟机分配了 8GB RAM,为主机系统分配了大约 3GB(相当少)。
当我在 Windows 服务器上启动应用程序并查看主机时,图表显示已分配 11GB,但在详细信息窗口(物理内存)中只有 4MB 可用。主机系统上有 4MB 可用 RAM 内存,虚拟机开始在硬盘上执行操作。为什么我的虚拟机(或主机系统)无法正确使用 RAM?为什么我的虚拟机使用硬盘内存而不是 RAM?
答案1
回答
在虚拟机中启动程序导致交换文件被使用的原因是因为有太多东西试图进入主机内存。我知道您说过主机使用的内存少于 3GB,但这似乎只是部分原因,可能是主机由于大量分配给客户虚拟机而严重限制了自身。在打开客户虚拟机之前,在让主机执行其他正常操作至少 20 分钟后,任务管理器性能选项卡中列出的可用内存和缓存内存是多少?
为了提高整体性能,我会将分配给虚拟机的 RAM 量减少到大约 6GB,以允许主机在 RAM 中存储更常用的数据。我知道这听起来违反直觉,但这会让客户虚拟机知道整个系统中没有那么多可用的 RAM,因此它会更节俭地使用 RAM,因此当它使用“所有 RAM 都应该用于某事”的心态时,它不会用无用的垃圾填充主机 RAM,因为客户虚拟机不再认为有足够的 RAM。减少客户虚拟机 RAM 分配意味着主机不必使用硬盘交换空间来为虚拟机提供其完整的 RAM 分配。请注意,任务管理器中的进程选项卡在视图->选择列屏幕中有许多不同的“内存”分类可用。
我发现,当任务管理器报告缓存内存不足时,这是整个系统运行缓慢的原因和结果。对于我在 8GB 机器上的使用模式,我发现如果机器运行时缓存的物理内存不到 33%,则速度会慢得令人无法忍受。因此,对于您,我会将缓存四舍五入为 6GB,虚拟机缓存 6GB,主机缓存 4GB。您可能会发现,由于主机对内存的要求,客户虚拟机需要进一步减少内存,但不要减少太多,否则客户虚拟机将过多使用其交换文件。对于客户虚拟机和主机来说,拥有足够的缓存都是提高性能的必要条件。不过,我注意到工作中的 32GB 远程桌面服务器仅使用 4-6GB 的缓存即可运行。
附加信息
在 Windows 任务管理器中
- 总内存 = Windows 可以使用的物理内存(某些硬件可以使用/共享物理内存,如某些图形硬件)
- 缓存内存 = Windows 在 RAM 中存储的内容,以防万一需要它,再加上完成写入硬盘所需的内容。
- 可用内存 = 您应考虑使用的内存
- 可用内存 = 当前无用且浪费的内存。您应该忽略此值,除非它一直保持较大的数字,否则 Windows 会损坏。随着越来越多的 RAM 变得有用,它应该会缓慢减少。
它们之间存在一些关系,特别是如果您深入研究资源监视器和/或 MS Sysinternals 实用程序 RAMmap 提供的详细信息。
- Taskmanager 缓存 = 资源监视器待机 + 已修改
- 任务管理器可用 = 资源监视器待机 + 空闲 + 清零
- 任务管理器空闲 = 资源监视器空闲 + 清零
重要的是要理解,备用内存可以立即丢弃并重新用于其他用途,这就是为什么它被视为可用的原因。如果 Windows 没有执行其他操作,并且有空闲和/或归零的 RAM,它将慢慢地将硬盘中的内容读入缓存并将其标记为备用内存。这使得 RAM 可以用于某些用途,而不仅仅是被浪费。
所有操作系统开发人员都应该将“可用内存”指标重命名为“浪费内存”
当您在客户机或主机操作系统上打开程序时,主机操作系统需要打开硬盘上的文件或文件的一部分。请注意,客户机硬盘是主机上的文件,由运行虚拟机的主机进程读取和写入。主机操作系统将在读取信息时对其进行缓存,如果主机上仍有浪费的(即空闲的)内存,它将作为备用数据保存在内存中。还请注意,缓存系统不必缓存整个文件,它可以只缓存文件的一部分,这就是 80GB 以上的文件可以将其部分内容存储在主机拥有的 16GB RAM 中的原因。
主机和客户操作系统平衡了程序想要分配的内存和提供硬盘上文件的缓存数据。通常,程序会分配一些它们很少需要的内存,而它们会频繁请求硬盘上的文件。操作系统使用硬盘上的交换文件来存储不常用的程序信息,这样它就可以有更多的内存来缓存文件。操作系统决定哪些内容放在内存中以及哪些内容留在硬盘上的唯一方法是统计这些信息被请求或写入的频率。这包括主机操作系统可能想要缓存的虚拟机硬盘文件的部分。
如果您的虚拟机需要使用其 vhdd 中的文件(例如打开程序),则意味着主机操作系统必须读取/写入包含 vhdd 的文件。如果客户虚拟机很忙,这也会使得主机很忙。
答案2
您支付了 RAM 费用,因此 Windows 正在使用它。有足够的空闲内存可以立即满足任何请求,并且如果需要,Windows 可以快速释放更多内存。
Windows 也会在严格需要之前使用你的硬盘。这并非反而RAM,但是此外。