VMware/ESX 中的 Linux VM 是否应该有交换分区?

VMware/ESX 中的 Linux VM 是否应该有交换分区?

在 VMware ESX 设置中这些选项有什么区别?:

  • 具有 1GB RAM 和 1GB 交换分区的 Linux VM,并且 VM 使用 1.5 GB RAM
  • 具有 1GB RAM 且没有交换分区的 Linux VM,并且 VM 使用 1.5 GB RAM

我的意思是,两种情况下都使用了交换;

  • 第一次交换是在 Linux 交换分区上进行的
  • 在第二种情况下,VMware 会将 512MB 交换到 VMware 存储池。

那么给 Linux VM 提供交换分区有什么意义吗?

答案1

忽略人们正在处理操作系统特定的原因这一事实,我有两个理由说明为什么不使用交换分区/文件运行是个坏主意。

  1. 如果您为虚拟机分配了 1.5 GB 的 RAM,但没有空间文件/分区,而虚拟机想要使用 1.5 GB + 1 MB,则会报告内存不足错误。有了交换空间,虚拟机就可以将数据从活动内存交换到磁盘上。
  2. 客户操作系统在内存管理方面比主机做得好得多。这就是内存膨胀等技术存在的原因,因为主机可以对哪些内存现在不需要做出有根据的猜测,而客户操作系统则以更智能的方式知道(这可以防止操作系统内存被换出,从而降低性能)。

答案2

是的。这是 Unix 的方式。

Unix(甚至 Linux)期望能够交换。
坏事当系统无法交换时(由于配置错误而没有交换分区,或者交换空间已满)就会发生这种情况。在 Linux 中,这些坏事之一就是内存不足杀手,它会将刀刺入它认为使用最多 RAM 的程序的背后(数据库服务器是最喜欢的目标)。

答案3

你设置了什么/proc/sys/vm/overcommit_memory?来自内核文档:

0       -       Heuristic overcommit handling. Obvious overcommits of
                address space are refused. Used for a typical system. It
                ensures a seriously wild allocation fails while allowing
                overcommit to reduce swap usage.  root is allowed to
                allocate slightly more memory in this mode. This is the
                default.

1       -       Always overcommit. Appropriate for some scientific
                applications.

2       -       Don't overcommit. The total address space commit
                for the system is not permitted to exceed swap + a
                configurable percentage (default is 50) of physical RAM.
                Depending on the percentage you use, in most situations
                this means a process will not be killed while accessing
                pages but will receive errors on memory allocation as
                appropriate.

因此,如果您使用 1,则没有区别。如果您使用 2 并且没有 Linux 交换文件,则没有进程能够分配 512M 的(虚拟)内存。对于 0,结果尚不清楚。

編輯:來自http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit0 的工作原理如下:

启发式过量使用会尝试计算出,如果系统回收了所有可以回收的内存,并且没有其他进程使用比当前更多的 RAM,系统可以为您提供多少内存;如果您请求的内存超过此数量,您的分配将被拒绝。具体来说,理论上的“可用内存”数量是通过将可用交换空间、可用 RAM(如果您不是 root 用户,则减去 1/32)以及统一缓冲区缓存和内核数据使用的所有空间相加而计算出来的,这些空间被标记为可回收(减去一些保留页面)。

因此它在计算中也使用了交换空间。一般来说,我会遵循 RHEL 的建议:

M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
    S = M *2
Else
    S = M + 2

答案4

请参阅以下链接- https://help.ubuntu.com/community/SwapFaq

基本上,除非您需要休眠或使用比分配给虚拟机的更多的内存,否则交换分区没有明显的优势。

多年来我从未在任何一台 Linux 机器上使用过交换分区/文件。

相关内容