前一段時間,我們機房中一台Linux服務器運行緩慢,系統服務出現間歇性停止響應,讓我過去處理一下這一問題,登錄到服務器之后,發現此服務器的物理內存是16G,而最初裝機的時候,系統管理人員卻只分配了4G的虛擬內存。查看內存的使用狀況,物理內存並沒有完全耗盡,但虛擬內存已經耗盡,整個系統CPU負載和磁盤IO都非常高。
知道了問題所在是由於交換分區不足導致,那么解決方法就是:將虛擬內存通過虛擬文件的方式增加到16G,系統運行狀況明顯好轉。其實虛擬內存並不是等到物理內存用盡了才使用的,是否盡量的使用或不使用swap,在內核空間有一個參數控制。
-
[root@localhost ~]
-
60
swappiness=0 的時候表示最大限度使用物理內存,然后才是swap空間;swappiness=100 的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間里面。對於現在動輒幾十GB、上百GB物理內存的服務器來說,究竟為其Linux系統設置多大的交換分區合適呢?為此,我引用紅帽官方里的一段文字進行簡單說明一下。
目前紅帽官方推薦交換分區的大小應當與系統物理內存的大小保持線性比例關系,不過在小於2GB物理內存的系統中,交換分區大小應該設置為內存大小的兩倍,如果內存大小多於2GB,交換分區大小應該是物理內存大小加上2GB。其原因在於,系統中的物理內存越大, 對於內存的負荷可能也越大。但是,如果物理內存大小擴展到數百GB,這樣做就沒什么意義了,大家說對吧!
實際上,系統中交換分區的大小並不取決於物理內存的量,而是取決於系統中內存的負荷。Red Hat 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.其它操作系統也是類似。