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