据我所知,根据使用32位还是64位系统,交换文件的理论限制非常大。
我在4GB RAM 64位系统上制作了16GB交换文件,但规格较低,因为我的1TB内部硬盘上有足够的空间...
但是,大型交换文件实际上在速度/性能上有所不同吗?
据我所知,根据使用32位还是64位系统,交换文件的理论限制非常大。
我在4GB RAM 64位系统上制作了16GB交换文件,但规格较低,因为我的1TB内部硬盘上有足够的空间...
但是,大型交换文件实际上在速度/性能上有所不同吗?
Answers:
您最多可以有32个交换区域(文件或分区),每个交换区域具有约40亿(2 ^ 32)个页面,其中“页面”在传统(例如x86或x86_64)系统上为4kB,但在其他系统上可以更大架构,或者是否专门配置了大页面。
理论上,每个交换区最多可提供16TB的数据,最多可交换32个交换区。在达到此目的之前,可能还有其他限制,但这是mkswap
可以为您创建的交换区域。
至于您想要多少,任何超出您实际使用的最大值的交换区域都不会影响系统性能或稳定性。诀窍是估算正常甚至异常情况下将出现的最大利用率,并将其用作交换文件的大小,而不用更多。
在编写本文时,除非系统非常异常,否则几乎不可能利用大于物理内存大小4GB左右的交换空间。在典型的系统(例如一个人一次使用的台式机系统)上,即使您的物理内存更大,您甚至可能最多停止6GB至8GB的存储。
它在速度或性能方面没有区别。它仅允许您在OOM杀手开始杀死进程以回收内存之前使用多达20 GB的虚拟内存。
如果您想要更好的性能:
swappiness
,如果你不超过4 GB的使用更加经常...过去曾经有2GB的交换大小限制(在大多数32位平台上),但是多年来一直没有。该限制在2.2内核系列中的某个时候已被删除。
此外,他引用了以下手册页mkswap
:
交换区的最大可用大小取决于体系结构和内核版本。
在linux / swap.h库中有MAX_SWAPFILES
条目,因此在内核级别上对交换文件的数量有限制,但是显然也不是确定的区域。根据链接的文件:
应当注意,“类型”的六位应允许在32位体系结构中存在多达64个交换区域,而不是MAX_SWAPFILES限制为32
据我了解,在32位架构上最多可以有64个交换文件。但是,我在文档中没有注意到64位体系结构会发生什么。同样值得注意的是,在这种情况下,OP创建交换文件的工作在第30个条目上失败。
至于交换分区,除了前面提到的constats之外,内核中似乎没有任何限制,但是任何分区的数量仍将受到基础BIOS和磁盘布局的限制。
这个答案可能不适用于Ubuntu 18.04(感谢@Chai T. Rex在注释中指出)。
无论如何,对于以前的版本,都是这样(仍然没有建议的更新LTS> LTS,因此这可能仍然有意义):
swappiness参数控制内核将进程移出物理内存并移入交换磁盘的趋势。因为磁盘要比RAM慢得多,所以如果进程过于主动地移出内存,则可能导致系统和应用程序的响应时间变慢。
因此,基本上,如果交换分区比您拥有的RAM大得多,系统将倾向于交换更多分区,从而导致总体速度变慢。
将交换分区增大到任意大时,速度或性能没有太大差异。
与交换有关的几个因素会影响性能,例如swappiness
硬盘类型(SDD或HDD)。
交换速度相当慢,而交换增加会降低性能。但是,只有在没有足够的RAM的情况下它才会产生影响。但这比没有任何交换要好。我的建议是使交换分区的大小是RAM的两倍。
我发现交换文件或交换分区实际上没有限制。另外,我的16GB交换文件很大,但是大小不会影响速度。
但是我发现,影响速度的是系统实际使用了交换空间,而不是物理硬件。
我对此的解决方案是使交换值较高,以便相对于更快的硬件,交换不会被过度使用。所以我做了:
sudo -s
nano /etc/sysctl.conf
已添加到文件:
#vm.swappiness = 50
救
sudo sysctl -p
刷新(或者可能刚刚重启)
#vm.swappiness = 50
到/etc/sysctl.conf
没有任何效果,领先#
使得此行是注释,将其删除。您可以使用来检查交换性cat /proc/sys/vm/swappiness
。