交换分区应该留多大?是内存的两倍还是一半?如果我的系统具有好几GB的内存,还需要交换分区吗?

这可能是安装Linux时最常问的问题。这并不奇怪,关于交换分区,一直以来就有很多疑惑。

很长时间,推荐的交换空间的大小是内存的两倍,但是针对现代的计算机,这个黄金法则已经不再适用了。我们现在的系统会有高达128B的内存,但很多旧的系统可能都没有这么高容量的硬盘。

但是针对一个具有32GB内存的系统,我们应该分配多大的交换空间呢?是64GB吗?那将会是一个非常荒谬的硬盘浪费,是不是?

在确认我们应该适用多大的交换空间之前,让我们先快速了解一下关于交换内存的一两个点,这将会帮助你来理解为什么要使用交换分区。

这儿我们尽可能地简化解释以让大家都能够理解。

Linux Swap

什么是交换分区?什么时候使用交换分区?

当运行一个应用程序的时候,你的系统会使用随机存取内存。当只有少许的应用程序运行的时候,系统会从可能的内存里面分配。

但当有很多应用程序运行的时候,或者有些应用程序需要很多内存,你的系统就会陷入困境了。如果一个应用程序需要更多的内存但是所有的内存又已经在使用中,这个应用程序就会崩溃了。

当内存已经用尽的时候,交换分区对于你的系统来说就像呼吸机一样。现在的情况是,当内存已经用尽的时候,你的Linux系统会使用部分硬盘存储并分配给运行的应用程序。

这听起来很酷,这意味这如果你分配50GB的交换分区,你的系统可以同时运行成百或上千的应用程序?错!

你知道的,这儿有影响的是速度。内存访问数据是按照纳秒级的。SSD数据访问速度是按照微妙级的,通常硬盘访问数据是毫秒级的。这意味着,内存比SSD快1000倍,比通常的硬盘快10万倍。

如果一个应用程序太多地依赖交换分区,它的性能将会下降,因为它不能够按照访问内存那样的速度来访问数据。为了一个只需要1秒的任务,它可能需要花费好几分钟来完成,这将会使得这个应用程序几乎没有用,这就是所谓的计算力划水。

换言之,少许的交换分区是有帮助的,太多的交换分区反而是没有用的。

为什么需要交换分区?

需要交换分区有好几个原因。

  • 如果你的系统的内存少于1 GB, 你必须使用交换分区因为绝大多数的应用程序将会很快消耗掉内存。
  • 如果你的系统使用像视频编译一样的资源特别重的应用,使用一些交换空间将会是个不错的主意,因为你的内存可能会被耗完。
  • 如果你使用休眠功能,那么你必须增加交换空间因为内存的内容将会被写入到交换分区。这也意味着交换分区的大小应该起码有内存的大小。
  • 避免陌生的事件比如一个程序挂起和吃内存。

在有很多内存的情况下你是否需要交换分区呢?

这确实是一个好问题。如果你具有32GB或者64GB的内存,那么就有可能你的系统永远用不完所有的内存,所以你就永远不需要交换分区。

但是你是否有这样的机会呢?我猜想如果你的系统具有32 GB的内存,它也有可能具有几百GB的硬盘。分配几GB的交换分区将不会有什么影响。这将会为某一个错误使用内存的应用程序提供一个额外的稳定层。

你是否可以不用交换分区的情况下使用Linux?

答案是肯定的,你可以,特别是当你的系统具有大量内存的情况下。但是正如之前部分解释的,我们还是建议开辟一点点交换空间。

交换空间的大小应该要多大呢?

现在来看这个大问题,针对Linux一个最佳的交换空间的大小应该是多大呢?

这儿的问题是针对交换空间大小的问题,从来没有一个标准的答案,只有一些推荐值。

不同的人对最佳的交换空间的大小有不一样的看法。甚至一些主流的Linux发行版也不会有相同的指导交换空间大小。

如果你看Redhat红帽的建议,针对现代的系统,他们推荐20%的内存大小(比如,4GB或者更大的内存)

CentOS有不一样的推荐交换空间大小,它建议交换空间的大小为:

  • 如果内存小于2GB的话,交换空间是内存的两倍
  • 如果内存大于2GB的话,交换空间是内存大小+2GB,比如内存是3GB,那么交换空间就是5GB

Ubuntu对交换空间大小具有一个完全不一样的观点,因为它也考虑了休眠。如果你需要休眠,和内存大小一样的交换空间对Ubuntu来说是必要的。

其他的,推荐如下:

  • 如果内存小于1GB,交换空间的大小应该起码和内存一样的大小,最多是内存大小的两倍。
  • 如果内存大于1GB,交换空间的大小应该起码和内存的平方根大小,最多是内存大小的两倍。
  • 如果休眠是需要的,交换空间应该是内存大小加上内存的平方根。

是不是困惑了?我知道这确实比较困惑。这也是我为什么创建下面的表格来告诉你Ubuntu推荐的基于你的内存大小和休眠的需要的交换空间的大小。

RAM Size Swap Size (Without Hibernation) Swap size (With Hibernation)
256MB 256MB 512MB
512MB 512MB 1GB
1GB 1GB 2GB
2GB 1GB 3GB
3GB 2GB 5GB
4GB 2GB 6GB
6GB 2GB 8GB
8GB 3GB 11GB
12GB 3GB 15GB
16GB 4GB 20GB
24GB 5GB 29GB
32GB 6GB 38GB
64GB 8GB 72GB
128GB 11GB 139GB

你使用多大的交换空间 ?

这个问题一直以来都不简单。正如我早些提到的,很久以来,交换空间的推荐大小是内存大小的两倍。实际上,我的Lenovo X220 Ubuntu版本具有16GB的交换空间大小针对8GB的内存。所以Lenovo是按照两倍内存的黄金准则。

针对你的Linux系统,你倾向的交换空间的大小是多大呢?

联系我们,请关注微信公众号:北南南北

北南南北