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


18

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

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

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

  • 在第一次交换中完成了对Linux交换分区的操作
  • 在第二种情况下,VMware将交换512MB到VMware存储池。

那么给Linux VM一个交换分区有什么意义吗?


您是在问ESX主机是否需要交换,或者如何用VM处理它?可能想详细说明问题,以指明您的意思。
巴特

希望现在完成。
桑德拉(Sandra)2012年

Answers:


15

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

  1. 如果您为没有空间文件/分区的VM分配了1.5 GB的RAM,并且它想使用1.5 GB + 1 MB,它将报告内存不足错误。有了交换空间,它将能够将数据从活动内存中交换到磁盘上。
  2. 来宾OS的内存管理工作要比主机好得多。这就是为什么存在诸如内存膨胀之类的技术的原因,因为主机可以立即就不需要的内存做出有根据的猜测,但是客户知道的级别要高得多(这可以防止OS内存被交换掉,这可能会降低性能)。

10

是。这是Unix方式。

Unix(甚至Linux)希望能够交换。当系统无法交换时,会发生
不好的事情(要么是因为没有交换分区而配置错误,要么是因为交换空间已满)。在Linux中,这些坏事之一是Out Of Memory Killer,它将把刀插入它认为使用了最多RAM的程序的后面(数据库服务器是最受欢迎的目标)。


4

你打算做什么/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/LinuxVMOvercommit,这是0的工作方式:

试探性过度使用尝试计算出如果系统回收了所有可能的内存,并且没有其他进程使用比当前更多的RAM,那么系统可以为您提供多少内存;如果您要求的更多,则拒绝您的分配。具体而言,理论上的“可用内存”数是通过将可用交换空间,可用RAM(如果不是root用户,则为1 / 32nd)以及标记为可回收的统一缓冲区高速缓存和内核数据使用的所有空间相加而得出的(减去一些保留页)。

因此,它也在计算中使用交换。通常,我会遵循以下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

1
cat /proc/sys/vm/overcommit_memory返回0。您对overcommit_memory价值和掉期/不掉期有何建议?
桑德拉(Sandra)2012年

3

交换分区可能会更快,尤其是在根磁盘几乎已满且您无法在没有碎片的情况下一步创建交换文件的情况下,更不用说文件系统可能会产生的开销,并且在可能的情况下还会产生类似的情况LVM。

但是,如果将33%的内存需求保留在磁盘上,则两台计算机的性能都会受到影响。


当您说“根磁盘”时。您是在ESX主机上创建ESX交换文件的意思吗?
桑德拉(Sandra)2012年

不,我的意思是VM的系统磁盘包含根文件系统。毕竟,这就是在没有专用交换分区的情况下进行交换的地方。
斯文

注意,这个答案是关于交换分区与交换文件之间的争论。我以为问题是您是否根本需要交换。
user606723,2012年

@ user606723:如果您根本不使用交换功能,那么如果您尝试分配的内存超过虚拟机的内存,则最终将出现内存不足错误,并且无论如何都不会发生1.5GB的使用情况和1GB的物理情况。
斯文

@SvenW,是的,但这并非必然会发生类似的事情。这是由管理员决定的。
user606723,2012年

0

请查看以下链接-https : //help.ubuntu.com/community/SwapFaq

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

我多年没有在任何Linux机器上使用交换分区/文件了。


1
问题不在于交换/不交换。它与VMware如何处理交换有关。
桑德拉(Sandra)2012年

0

交换的明显优势是,当计算机崩溃时,您仍然可以创建崩溃转储。如果我错了,请纠正我,但是afaik如果没有交换,就不可能这样做。当然,这不是VMWare特定的,而是适用于任何地方。我觉得有必要指出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.