我想了解我的应用程序对内存的需求是如何施加在虚拟机和/或主机上的。这个问题的背景是使用 Hyper-V 的 Windows Server 2016 上的 Windows 10 客户机操作系统。
如果我在物理 Windows 10 计算机(具有 32GB RAM)上运行 64 位应用程序,则它执行的进程将在大约 10GB 虚拟内存时达到峰值,并将成功运行。该应用程序在虚拟机上运行(事后我才知道,虚拟机只为客户操作系统分配了 4GB),并且应用程序失败了。我假设它因内存耗尽而失败,但没有诊断来确认这一点。
由于应用程序在进程虚拟内存中执行,因此它不应受到可用物理内存的限制(即使主机系统应该有足够的内存)。我预计分配给 VM 的 4GB 会限制物理内存的使用,因此不应限制在 VM 中执行的任何进程可用的虚拟内存,对吗?或者 VM 的内存分配实际上是否表现为对在 VM 中执行的进程可用的虚拟内存的限制?是否需要选择 VM 的内存分配以满足应用程序的虚拟内存要求?
答案1
在任何操作系统中,可用的总虚拟内存是 RAM 和交换文件的总和。
具有 4 GB RAM 的虚拟机或计算机不太可能分配至少 6 GB 的交换文件,这将完成应用程序所需的 10 GB。因此,一旦耗尽,额外的内存请求就会失败。
您还应该考虑虚拟机操作系统所需的内存、磁盘访问所需的缓存内存等。
无论如何,让大部分虚拟内存驻留在交换文件中对性能来说都是很不利的。VM 可能会冒着除了将内存页面交换进出 RAM 之外什么都不做的风险,从而导致磁盘崩溃。