交换分区应该有多大?

交换分区应该有多大?

多年来,我一直听说创建一个具有两倍于 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

我的 VPS 提供商甚至不为服务器提供交换空间,但我的服务器即使没有交换空间也运行良好。

我每天在工作中看到的大多数服务器也没有交换。

编辑

但是 - 如果你正在运行 JVM,当然你有至少尽可能多的交换空间曾经因为-Xmx已知 问题使用 JVM。

简而言之,当 JVM 需要的内存比它当前使用的内存多(但尚未达到Xmx)时,它:

  • 将自身交换到磁盘
  • 分配新内存
  • 将自身读回到 RAM 中

这意味着如果您的交换小于您的Xmx,它可能会失败。

引用错误报告

最好的办法是增加遇到此错误的机器的交换大小。

我尝试在使用 JVM 时谨慎行事,并将交换设置为等于物理内存。

答案4

如果你希望你的系统能够休眠然后成功恢复 :-) ,那么为交换分区分配比物理 RAM 更多的空间可能更好

相关内容