交换文件可以使用的最大大小是多少?


8

据我所知,根据使用32位还是64位系统,交换文件的理论限制非常大。

我在4GB RAM 64位系统上制作了16GB交换文件,但规格较低,因为我的1TB内部硬盘上有足够的空间...

但是,大型交换文件实际上在速度/性能上有所不同吗?



2
IMO如果您使用交换,则确实需要更多的RAM,而不是更大的交换文件
Panther,

1
如果使用HDD,则应改用zram,并降低HDD交换的优先级。如此大的交换分区将无济于事,因为按您所使用的类型(例如4GB交换),您的系统已缓慢地进行爬网
phuclv


据我所知,交换文件将消耗一定数量的物理RAM(我认为不到交换文件大小的1%)。因此,具有太大的交换文件可能会由于该内存消耗而损害性能。但是对于一个合理大小的交换文件,这将不是问题。
卡巴斯德(Kasperd)'18年

Answers:


7

您最多可以有32个交换区域(文件或分区),每个交换区域具有约40亿(2 ^ 32)个页面,其中“页面”在传统(例如x86或x86_64)系统上为4kB,但在其他系统上可以更大架构,或者是否专门配置了大页面。

理论上,每个交换区最多可提供16TB的数据,最多可交换32个交换区。在达到此目的之前,可能还有其他限制,但这是mkswap可以为您创建的交换区域。

至于您想要多少,任何超出您实际使用的最大值的交换区域都不会影响系统性能或稳定性。诀窍是估算正常甚至异常情况下将出现的最大利用率,并将其用作交换文件的大小,而不用更多。

在编写本文时,除非系统非常异常,否则几乎不可能利用大于物理内存大小4GB左右的交换空间。在典型的系统(例如一个人一次使用的台式机系统)上,即使您的物理内存更大,您甚至可能最多停止6GB至8GB的存储。


6

它在速度或性能方面没有区别。它仅允许您在OOM杀手开始杀死进程以回收内存之前使用多达20 GB的虚拟内存。

如果您想要更好的性能:

  • 减少swappiness,如果你不超过4 GB的使用更加经常
  • 添加RAM
  • 切换到SSD并将交换文件放在上面

如果您经常不得不换出内存块,那么由于其架构和有限的写周期而导致的SSD并非可行之路,因为它可以轻松快速地耗尽SSD的写周期。如果您只是偶尔需要交换内存,固态硬盘就可以了。
Videonauth

11
@Videonauth:“可轻松使用了SSD的写入周期非常快”:任何类型的半体面的现代SSD可以维持书写一天后,SSD天的满负荷。您的建议在2010年可能是正确的,但已过时。即使是消费级的256 GiB Samsung SSD 840也可以维持每天写入100 GiB超过2年的时间。
AlexP

如果您有大量的RAM,则与只有有限的RAM的情况相比,减少可交换性所带来的影响甚至更少。如果足以避免交换,那么实际上安装大量RAM会使任何其他调整变得多余。保留交换分区以确保稳定性,以防万一,在99.9%的时间将不使用它,并且您将保留出色的性能。
thomasrutter

1
此外,关于有限的SSD写入周期的事情在十多年来一直是不正确的,这确实是时候需要取消这个FUD了。抱歉,鉴于AlexP已经解决了此评论,因此该评论是如此多余,但需要强调。SSD 非常适合大量写入的应用程序。
thomasrutter

1
SSD的磨损均衡在2008年前后成为一件大事(2008年论文 | 2009年Anandtech文章)。“在2008年,甚至在普通消费者价位的笔记本电脑上都附带了SSD”。
thomasrutter

3

根据吉尔斯回答

...过去曾经有2GB的交换大小限制(在大多数32位平台上),但是多年来一直没有。该限制在2.2内核系列中的某个时候已被删除。

此外,他引用了以下手册页mkswap

交换区的最大可用大小取决于体系结构和内核版本。

linux / swap.h库中MAX_SWAPFILES条目,因此在内核级别上对交换文件的数量有限制,但是显然也不是确定的区域。根据链接的文件:

应当注意,“类型”的六位应允许在32位体系结构中存在多达64个交换区域,而不是MAX_SWAPFILES限制为32

据我了解,在32位架构上最多可以有64个交换文件。但是,我在文档中没有注意到64位体系结构会发生什么。同样值得注意的是,在这种情况下,OP创建交换文件的工作在第30个条目上失败。

至于交换分区,除了前面提到的constats之外,内核中似乎没有任何限制,但是任何分区的数量仍将受到基础BIOS和磁盘布局的限制


2

这个答案可能不适用于Ubuntu 18.04(感谢@Chai T. Rex在注释中指出)。

无论如何,对于以前的版本,都是这样(仍然没有建议的更新LTS> LTS,因此这可能仍然有意义):

它不是文件,而是分区,是的,由于交换性能,它确实可以

swappiness参数控制内核将进程移出物理内存并移入交换磁盘的趋势。因为磁盘要比RAM慢得多,所以如果进程过于主动地移出内存,则可能导致系统和应用程序的响应时间变慢。

因此,基本上,如果交换分区比您拥有的RAM大得多,系统将倾向于交换更多分区,从而导致总体速度变慢。


4
现在有交换文件,当从头开始安装18.04时,它们是默认的(而不是分区)。
柴T.雷克斯'18

1
我认为交换的行为几乎保持不变,无论它是由分区还是文件支持的。您也可以同时具有多个交换文件和/或分区。无论如何,我认为如果还有足够的RAM,更多的交换不会产生负面影响。
字节指挥官

我会假设相同,但是直到我开始
尝试

有交换分区和交换文件。交换分区可由同一台PC上的两个或多个Linux安装使用(双引导或三引导)。交换分区最好在完整磁盘的情况下使用,其中可以创建交换文件的碎片。...如果在非完整磁盘上创建交换文件以避免碎片,交换文件将与交换分区一样好-Devon van Schoor j
Devon van Schoor

2

将交换分区增大到任意大时,速度或性能没有太大差异。

与交换有关的几个因素会影响性能,例如swappiness硬盘类型(SDD或HDD)。

交换速度相当慢,而交换增加会降低性能。但是,只有在没有足够的RAM的情况下它才会产生影响。但这比没有任何交换要好。我的建议是使交换分区的大小是RAM的两倍。


5
该建议已过时。具有32或64GB RAM的现代系统将不需要64或128GB交换
-phuclv

3
@LưuVĩnhPhúc这些天我不会使用超过2GB的交换...
el.pescado

2GB似乎非常低……虚拟机或游戏确实可以非常快地完成超过2GB的交换。我认为4到8gb的交换可以与任意数量的ram一起使用。如果您需要8GB以上的内存,则可能应该添加更多的ram。
Germain

0

我发现交换文件或交换分区实际上没有限制。另外,我的16GB交换文件很大,但是大小不会影响速度。

但是我发现,影响速度的是系统实际使用了交换空间,而不是物理硬件。

我对此的解决方案是使交换值较高,以便相对于更快的硬件,交换不会被过度使用。所以我做了:

sudo -s
nano /etc/sysctl.conf

已添加到文件:

#vm.swappiness = 50

sudo sysctl -p

刷新(或者可能刚刚重启)


添加一行#vm.swappiness = 50/etc/sysctl.conf没有任何效果,领先#使得此行是注释,将其删除。您可以使用来检查交换性cat /proc/sys/vm/swappiness
mook765

但是我描述的方法确实有效。当我输入[cat / proc / sys / vm / swappiness]时,输出为50
Devon van Schoor,
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.