Swap交換大小應該是多少?交換應該是RAM大小的兩倍還是RAM大小的一半?如果我的系統有幾GB的RAM,我是否需要交換?
也許這些是關于在安裝Linux時選擇交換大小的最常見問題。
這不是什么新鮮事。交換大小一直存在很多混亂。
Swap兩倍于內存的時代已經過去
很長一段時間,推薦的交換大小是RAM大小的兩倍,但這條黃金法則不再適用于現代計算機。
我們的系統RAM大小高達128 GB,許多舊計算機甚至沒有這么多的硬盤。但是你會分配到具有32 GB RAM的系統的交換大小? 64GB?那將是一個荒謬的硬盤浪費,不是嗎?
在了解需要分配Swap空間應該分配多大之前,讓我們先快速了解交換內存的一兩件事。
這些有助于讓每個人真正理解為什么Linux需要Swap交換空間。
什么是Swap?Swap什么時候會被使用到?
我們都知道計算機系統在運行的時候會使用到RAM(Random Access Memory),當只有少數應用程序在運行時,系統會使用可用的RAM進行管理。
但是如果有很多很多的程序在運行,那么就需要非常大容量RAM,這時候計算機RAM不夠,應用程序就會崩潰。
當RAM耗盡時,Swap交換空間會被系統使用。當RAM耗盡時,Linux系統使用部分硬盤內存并將其分配給正在運行的應用程序。
這聽起來非常不錯,這意味著如果我們如果分配50GBSwap交換空間,系統或許可以同時運行成百上千的應用程序?是這樣么?大錯特錯!!!
你知道的,程序運行速度十分重要;
RAM訪問數據的大小為納秒級;
SSD訪問數據(以微秒為單位),而普通硬盤以毫秒為單位訪問數據;
這意味著RAM比SSD快1000倍,比普通HDD快100,000倍。
如果應用程序過分依賴Swap交換空間,則其性能將下降,因為它無法以與RAM中相同的速度訪問數據。
因此,完成相同任務可能需要幾分鐘才能完成任務,而不需要花費1秒鐘完成任務。這將使應用程序幾乎無用。這被稱為計算術語中的顛簸。
Swap交換空間只是用來應急的,所以它的分配要適量。
為什么需要Swap交換空間
以下是需要交換空間Swap的幾個原因
- 如果系統的RAM小于1GB,就必須使用Swap交換空間,不然沒運行幾個應用程序,他們就會崩潰
- 如果系統運行了非常重的應用程序,例如視頻制作軟件,使用Swap交換空間可以防止因為RAM空間不夠用導致的軟件崩潰
- 如果電腦休眠了,斷電RAM會被斷電;RAM沒有斷電記憶功能,因此要將這些內容暫時存入Swap交換空間里,當從休眠中恢復過來的時候,這些內容會被重新讀入RAM,保證程序繼續運行
- 為了避免有些程序瘋狂的吃掉很多內存,這個時候需要Swap來幫助我們規避這些風險
當RAM很大的時候,需不需要分配很大的交換空間?
如果你的RAM有32GB或者64GB,你的系統可能永遠都不會使用到這么多的交換分區。
我猜測,如果你的系統有32GB的RAM,它或許至少有100GB的硬盤。
分配幾GB的交換空間應該也無關痛癢,如果錯誤的程序開始濫用RAM,它將提供額外的“穩定性”。
應該分配多大的Swap交換空間
現在回到這個最大的問題上,應該給Linux分配多少Swap空間才夠。
答案是沒有一個確切的答案,不過倒是有一些建議,不同的人根據自己的實際情況分配交換空間的大小。
如果根據Red Hat的建議,他們建議是分配RAM 20%的換空間,也就是RAM是8GB,分配1.6GB交換空間。
CentOS建議
- 如果RAM小于2GB,就分配和RAM同等大小的Swap交換空間。
- 如果RAM大于2GB,就分配2GB交換空間
Ubuntu考慮到系統需要休眠,
- 如果RAM小于1GB,Swap空間至少要和RAM一樣大,甚至是要為RAM的兩倍大小
- 如果RAM大于1GB,Swap交換空間應該至少等于RAM大小的平方根,并且最多為RAM大小的兩倍
- 如果要休眠,Swap交換大小應該等于RAM的大小加上RAM大小的平方根
Ubuntu建議的Swap分配表
Ram大小 | Swap大小 | 激活Swap后合計大小 |
---|---|---|
256MB | 256MB | 512MB |
512MB | 512MB | 1GB |
1GB | 1GB | 2GB |
3GB | 2GB | 5GB |
4GB | 2GB | 6GB |
6GB | 2GB | 8GB |
8GB | 3GB | 11GB |
12GB | 3GB | 15GB |
16GB | 4GB | 20GB |
32GB | 6GB | 38GB |
64GB | 8GB | 72GB |
128GB | 11GB | 139GB |
結語
事實上沒有一個真正確定的Swap交換空間分配大小,根據實際情況來吧,如果你不在乎多點交換空間,可以使用兩倍于RAM的這種方案。
你更傾向于使用哪種方案呢?