交换分区应该留多大?是内存的两倍还是一半?如果我的系统具有好几GB的内存,还需要交换分区吗?
这可能是安装Linux时最常问的问题。这并不奇怪,关于交换分区,一直以来就有很多疑惑。
很长时间,推荐的交换空间的大小是内存的两倍,但是针对现代的计算机,这个黄金法则已经不再适用了。我们现在的系统会有高达128B的内存,但很多旧的系统可能都没有这么高容量的硬盘。
但是针对一个具有32GB内存的系统,我们应该分配多大的交换空间呢?是64GB吗?那将会是一个非常荒谬的硬盘浪费,是不是?
在确认我们应该适用多大的交换空间之前,让我们先快速了解一下关于交换内存的一两个点,这将会帮助你来理解为什么要使用交换分区。
这儿我们尽可能地简化解释以让大家都能够理解。
什么是交换分区?什么时候使用交换分区?
当运行一个应用程序的时候,你的系统会使用随机存取内存。当只有少许的应用程序运行的时候,系统会从可能的内存里面分配。
但当有很多应用程序运行的时候,或者有些应用程序需要很多内存,你的系统就会陷入困境了。如果一个应用程序需要更多的内存但是所有的内存又已经在使用中,这个应用程序就会崩溃了。
当内存已经用尽的时候,交换分区对于你的系统来说就像呼吸机一样。现在的情况是,当内存已经用尽的时候,你的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系统,你倾向的交换空间的大小是多大呢?
联系我们,请关注微信公众号:北南南北