Linux 中交換空間 (swap)應該分多大才好?

鳳鳴哥發表於2020-10-04

前一段時間,我們機房中一臺Linux伺服器執行緩慢,系統服務出現間歇性停止響應,讓我過去處理一下這一問題,登入到伺服器之後,發現此伺服器的實體記憶體是16G,而最初裝機的時候,系統管理人員卻只分配了4G的虛擬記憶體。檢視記憶體的使用狀況,實體記憶體並沒有完全耗盡,但虛擬記憶體已經耗盡,整個系統CPU負載和磁碟IO都非常高。

知道了問題所在是由於交換分割槽不足導致,那麼解決方法就是:將虛擬記憶體透過虛擬檔案的方式增加到16G,系統執行狀況明顯好轉。其實虛擬記憶體並不是等到實體記憶體用盡了才使用的,是否儘量的使用或不使用swap,在核心空間有一個引數控制。

[root@web ~]# cat /proc/sys/vm/swappiness

60

swappiness=0 的時候表示最大限度使用實體記憶體,然後才是swap空間;swappiness=100 的時候表示積極的使用swap分割槽,並且把記憶體上的資料及時的搬運到swap空間裡面。對於現在動輒幾十GB、上百GB實體記憶體的伺服器來說,究竟為其Linux系統設定多大的交換分割槽合適呢?為此,我引用紅帽官方里的一段文字進行簡單說明一下,嘿嘿。

目前紅帽官方推薦交換分割槽的大小應當與系統實體記憶體的大小保持線性比例關係,不過在小於2GB實體記憶體的系統中,交換分割槽大小應該設定為記憶體大小的兩倍,如果記憶體大小多於2GB,交換分割槽大小應該是實體記憶體大小加上2GB。其原因在於,系統中的實體記憶體越大, 對於記憶體的負荷可能也越大。但是,如果實體記憶體大小擴充套件到數百GB,這樣做就沒什麼意義了,大家說對吧!

實際上,系統中交換分割槽的大小並不取決於實體記憶體的量,而是取決於系統中記憶體的負荷。  Enterprise Linux 可以在這樣的情況下工作:完全沒有交換分割槽,而且系統中匿名記憶體頁和共享記憶體頁小於3/4的實體記憶體量。在這種情況下,系統會將匿名記憶體頁和共享記憶體頁鎖定在實體記憶體中,而使用剩餘的實體記憶體來緩衝檔案系統資料(pagecache),當記憶體耗盡時,系統核心只會回收利用這些pagecache記憶體。

考慮到以下情況:

1)安裝系統時難以確定記憶體的負荷,如何設定交換分割槽大小

2)系統中實體記憶體越大,所需交換分割槽就會越少

因此,在Red Hat Enterprise Linux 中,以下是設定合適的交換分割槽大小的規則:

實體記憶體 交換分割槽(SWAP)
<= 4G 至少4G
4~16G 至少8G
16G~64G 至少16G
64G~256G 至少32G

注:

1.但我們平時安裝系統時,預設都分記憶體的2倍,因為現在有硬碟空間都很大,也不在乎那幾十G的空間,嘿嘿!(其實也是為了省事)

2.其它作業系統也是類似。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26745044/viewspace-2725451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章