交换分区应该有多大?

几年来,我已经读过,创build一个具有我的RAM双倍空间的交换分区是一个好主意。 它今天仍然适用? 或者这不再需要?

我有一个服务器与8 GiB的RAM,我需要创build一个交换分区,我想知道如果16 GiB太多了。

在大型系统上,8GB物理内存,我们通常会分配2GB的交换空间。 这些是加载数据库服务器运行Oracle或PostgreSQL。 多年来,即使在重负载下,我也从来没有见过交换机。 大约有100到150个用户在执行大约10,000次SQL读取,而且每分钟可能写入2500次。

我们也调整交换级别以阻止交换,并closures不需要的进程,我们知道我们不需要运行。 (自定义Linux版本)

和Eddie一样,上面说的是,对于小于4GB的任何东西,1x物理内存是一个很好的经验法则。 我为一家大型财富500强公司定制了Linux,这些都是我们通常所做的事情,在过去的5年中我们一直在为他们咨询,所以我们没有任何问题。

在较大的系统上:64位Linux,32GB和64GB内存,这些是我们的Oracle数据库服务器,我们通常保留2GB的交换空间,像Eddie指出的那样 – 根据交换设置,空闲进程将被移动到交换位置。

一个看似永恒的问题。 SlashDot上的好人讨论了这个。 看看他们该说些什么:

  • 磁盘空间不是现代硬盘的问题,对于现代的硬盘,16GB仍然是一个微不足道的数字。
  • 但是,如果内存pipe理不善,交换空间可能会很大:

如果我在2小时内观看4 GB的电影,很多内存pipe理者会决定试图caching所有这些数据可能是件好事。 通过影片的一半,它会认为所有其他正在运行的程序已经被闲置了一个小时,并且可以安全地换出来,以便caching更多的4 GB文件。 最终的结果是,在观看电影之后,有一半的节目被换出,导致整个交换文件的系统崩溃。

  • 最后,正确的决定应该来自记忆要求,而不是球场公式:

如果你有[足够的RAM来运行你想每天使用的程序],那么没有理由使用交换。

查看答案在高内存系统上有多lessSWAP空间? 对于一些指导,虽然你的问题是更一般的。 有关这方面的观点各不相同,但是一般情况下,1Gb或更高的内存似乎要么完全没有交换,要么以1x内存作为交换。

即使你不打算使用太多的内存来强制交换,但至less有1x内存作为交换是有价值的:它允许操作系统交换一些不被期望使用的东西请立即使用,例如,可以将该内存用于磁盘或IO缓冲区。

如果您希望系统能够进入hibernate状态,然后成功恢复:-),那么为交换分区分配更多空间可能会比物理RAM的数量多

我的VPS提供商甚至没有为服务器提供交换空间,而且我的VPS一直没有运行。

我在工作中每天看到的大多数服务器都是无交换的。

编辑

但是,如果您正在运行JVM,请确保 至less具有与设置-Xmx相同的交换空间,因为JVM存在已知 问题 。

总之,当JVM需要比当前使用的内存更多的内存时(但是仍然没有达到Xmx ),它:

  • 交换自己的磁盘
  • 分配新的内存
  • 自己读回RAM

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

引用错误报告

要做的最好的事情是在遇到这个错误的机器上增加交换大小。

我尝试使用JVM进行安全操作,并将交换设置为相同的物理内存。

考虑到现代硬盘驱动器的速度,大量掉期仅仅是一个哗众取宠的邀请。 也许固态硬盘将扭转这个趋势,但是对于一个磁盘来说,最大传输速度可能达到300MB / s,换成2-4GB将会需要很长一段时间。

在过去的日子里(例如:Linux 1.2,i386,SunOS 4.x),你可能会有5-15 MB的守护进程在运行,并且有4-32MB的内存,所以守护进程只是被阻塞,等待I / O可以被换掉,没有真正的性能上的冲击…而且他们会更好,因为用户程序可能只有2-3MB的RAM。 交换意义重大。

现在在我的环境中,大多数服务器都有单内存繁重的工作负载,RAM可以被相当准确地估计出来。交换是用于紧急事件,失控进程等等。

例外是可能睡觉的膝上型计算机和工作站。 许多操作系统将使用交换区域来保存挂起的映像,在这种情况下,交换必须大于物理内存。 在使用suspend2 / tuxonice的Linux中,应该有交换大小的2XRAM来支持暂停到磁盘。

理想情况下,你根本不会使用交换,2X RAM的东西真的是过去几年遗留的东西。

如果你担心,我会做一些事情:

 Max Memory Requirement - Physical Ram = Swap 

我个人认为16GB听起来太大了。

在过去的日子里,你需要尽可能多的获得现代* nix内核的内存消耗已成为过去。 古语是“你的记忆力2倍”。 2GB之间或机器在这个日子和年龄的RAM空间量将带你靠近你需要的地方。

内核恐慌后,交换也用于存储转储。 如果您对分析这些转储感兴趣并且没有指定另一个转储目标,那么您的交换应该至less与您的RAM一样大。

现在,如果您正在运行32 GB或64 GB的服务器,默认情况下4 GB的交换是安全的。 任何大于这个值的东西都是可用的物理内存。

没有一个algorithm可以告诉你需要多less交换。 实际上,您需要将系统置于您计划支持的最大负载之下,并查明实际使用的资源量。 相应地设置你的交换文件。

对于物理内存,您应该将系统置于您希望处理的实际“巡航”负载下,并据此购买。 对于低延迟系统,您不应该在巡航负载内部进行交换(这与不交换分配或甚至在使用中不一样)。由于less量使用的系统实用程序执行pipe理,可能会发生less量交换,但总的来说,你应该尽可能less的交换。

当然,你可以用较低的价格来折衷performance。