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