多年来,我一直听说创建一个具有两倍于 RAM 空间的交换分区是一个好主意。它现在仍然适用吗?或者不再需要了?
我有一台具有 8 GiB RAM 的服务器,我需要创建一个交换分区,我想知道 16 GiB 是否太多了。
答案1
在大型系统(8GB 物理 RAM)上,我们通常分配 2GB 交换空间。这些是运行 Oracle 或 PostgreSQL 的负载数据库服务器。多年来,即使在重负载下,我也从未见过交换空间被占用。重负载大约是 100 到 150 个用户每分钟执行大约 10,000 次 SQL 读取,大约 2,500 次写入。
我们还调整了交换级别以阻止交换,并关闭了我们知道不需要运行的不需要的进程。(自定义 Linux 版本)
就像 Eddie 上面说的,对于 4GB 以下的任何设备,1x 物理 RAM 都是一个不错的经验法则。我为一家大型财富 500 强公司定制 Linux 构建,这些是我们通常做的事情,在过去 5 年左右的时间里,我一直为他们提供咨询,没有遇到任何问题。
在更大的系统上:具有 32GB 和 64GB RAM 的 64 位 Linux,这些是我们的 Oracle 数据库服务器,并且我们通常保留 2GB 的交换空间用于 Eddie 上面指出的内容 - 空闲进程将根据您的交换设置移动到交换空间。
答案2
这个问题似乎永不过时。在 SlashDot不久前讨论过这个问题。看看他们怎么说:
- 对于现代 HDD 来说,磁盘空间不是问题,对于现代 TB 驱动器来说,16GB 仍然是一个微不足道的数量。
- 然而,如果内存管理不善,大量的交换空间可能会带来问题:
如果我在 2 小时内观看了一部 4 GB 的电影,许多内存管理器会认为尝试缓存所有数据可能是件好事。电影播放到一半时,它会认为所有其他正在运行的程序都已一小时未使用,可以安全地交换出去,以便缓存更多 4 GB 的文件。最终结果是,看完电影后,一半的程序被交换出去,导致系统运行缓慢,交换文件到处都是垃圾。
- 最后,正确的决定应该来自于内存需求,而不是大概的公式:
如果您有 [足够的 RAM 来运行您每天想要使用的程序],那么就没有理由使用交换。
答案3
答案4
如果你希望你的系统能够休眠然后成功恢复 :-) ,那么为交换分区分配比物理 RAM 更多的空间可能更好