据我所知,交换文件的理论限制非常大,取决于使用的是 32 位还是 64 位系统。
我在 4GB RAM 64 位系统上创建了一个 16GB 的交换文件,其他方面都低于平均水平,因为我的 1TB 内置硬盘上有足够的空间……
但是大型交换文件实际上会对速度/性能产生影响吗?
答案1
您最多可以拥有 32 个交换区域(文件或分区),每个交换区域最多有 ~40 亿(2^32)个页面,其中在传统(例如 x86 或 x86_64)系统上“页面”为 4kB,但在其他架构上或者如果您特别配置了大页面,则页面大小可能会更大。
理论上每个交换区的最大容量为 16TB,最多可创建 32 个交换区。在达到此容量之前可能还有其他限制,但这是可以mkswap
为您创建的最大交换区。
至于您想要多少,任何超出您实际使用的最大交换区域都不会对系统性能或稳定性产生任何影响。诀窍是估算在正常甚至异常情况下可能发生的最大利用量,并将其用作交换文件大小,仅此而已。
在撰写本文时,除非您的系统不典型,否则超出(RAM + 4GB 的大小)的交换空间不太可能被使用。
答案2
速度和性能方面没有区别。它只是允许您使用最多 20 GB 的虚拟内存,然后 OOM 终止程序才会开始终止进程以回收内存。
如果你想要更好的性能:
swappiness
如果你不经常使用超过 4 GB,请减少- 添加 RAM
- 切换到 SSD 并将交换文件放在上面
答案3
...以前有 2GB 的交换空间大小限制(在大多数 32 位平台上),但这种情况多年来一直没有改变。在 2.2 内核系列中,该限制已被取消。
此外,他引用了手册页mkswap
:
交换区域的最大有用大小取决于架构和内核版本。
在linux/swap.h 库有MAX_SWAPFILES
条目,因此内核级别的交换文件数量存在限制,但这显然也不是确定的区域。根据链接的文档:
需要注意的是,“类型”的六位应允许在 32 位架构中存在最多 64 个交换区域,而不是 MAX_SWAPFILES 限制的 32 个
据我所知,在 32 位架构上最多有 64 个交换文件。但是,我没有注意到文档中提到在 64 位架构上会发生什么。同样值得注意的是,在这个案例,OP 创建交换文件的努力在第 30 次条目上失败了。
至于交换分区,除了前面提到的常量之外,内核似乎没有限制,但任何分区的数量仍然受到底层 BIOS 和磁盘布局。
答案4
将交换分区增加到任意大时,速度或性能不会有太大差别。
与交换相关的几个因素可能会影响性能,例如swappiness
硬盘类型(SDD 或 HDD)。
交换相当慢,增加交换量会降低性能。但是,只有在 RAM 不足的情况下才会产生影响。但这比没有交换要好。我的建议是将交换分区大小设置为 RAM 的两倍。