首頁  >  文章  >  運維  >  linux下swap分區作用詳解

linux下swap分區作用詳解

小云云
小云云原創
2018-01-24 13:22:252064瀏覽

本文主要介紹了詳細解讀linux下swap分區的作用,小編覺得還挺不錯的,具有一定借鑒價值,需要的朋友可以參考下,希望能幫助到大家。

本文研究的主要是linux下swap分割區的相關內容,具體介紹如下。

swap分區介紹

嵌入式Linux中文站訊息,Linux系統的Swap分區,也就是交換區,Swap空間的作用可簡單描述為:當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以便目前正在執行的程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被暫時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理記憶體不夠時,才進行Swap交換。其實,Swap的調整對Linux伺服器,特別是Web伺服器的效能至關重要。透過調整Swap,有時可以越過系統效能瓶頸,節省系統升級費用。

如大家所知,現代作業系統都實現了「虛擬記憶體」這項技術,不僅在功能上突破了物理記憶體的限制,使程式可以操縱大於實際物理記憶體的空間,更重要的是,「虛擬記憶體」是隔離每個進程的安全保護網,使每個進程都不受其它程式的干擾。

可能電腦使用者會常常遇到這種現象。例如,在使用Windows系統時,可以同時執行多個程序,當你切換到一個很久沒有理會的程式時,會聽到硬碟「嘩嘩」直響。這是因為這個程式的記憶體被那些頻繁運作的程式給「偷走」了,放到了Swap區。因此,一旦此程式被放置到前端,它就會從Swap區取回自己的數據,將其放進內存,然後接著運行。

另外,並不是所有從物理記憶體中交換出來的資料都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分資料被直接交換到檔案系統。例如,有的程式會開啟一些文件,對文件進行讀寫(其實每個程式都至少要開啟一個文件,那就是運行程式本身),當需要將這些程式的記憶體空間交換出去時,就沒有必要將檔案部分的資料放到Swap空間了,而可以直接放到檔案裡去。如果是讀取文件操作,那麼記憶體資料直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統恢復;如果是寫文件,只需要將變化的資料保存到文件中,以便恢復。但是那些用malloc和new函數產生的物件的資料則不同,它們需要Swap空間,因為它們在檔案系統中沒有對應的「儲備」文件,因此被稱作「匿名」(Anonymous)記憶體資料。這類資料還包括堆疊中的一些狀態和變數資料等。所以說,Swap空間是「匿名」資料的交換空間。

突破128M Swap限制

有些Linux(國內漢化版)安裝手冊上有這樣的說明:Swap空間不能超過128M。為什麼會有這種說法?在說明「128M」這個數字的來歷之前,先給問題一個回答:現在根本不存在128M的限制!現在的限制是2G!

Linux系統中的Swap空間是分頁的,每一頁的大小和記憶體頁的大小一樣,方便Swap空間和記憶體之間的資料交換。舊版的Linux實作Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個「位元映射」(Bit map)。這就是說第一頁的每一位,都對應一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這麼說來,第一個Swap映射位元應該是0,因為,第一頁Swap是映射頁。另外,最後10個映射位也被佔用,用來表示Swap的版本(原來的版本是Swap_space ,現在的版本是swapspace2)。那麼,如果說一頁的大小為s,這種Swap的實作方法共能管理「8 * ( s - 10 ) - 1」個Swap頁。對於i386系統來說s=4096,則空間大小共為133890048,如果認為1 MB=2^20 Byte的話,大小正好為128M。
這樣來實現Swap空間的管理,是要防止Swap空間中有壞塊。如果系統檢查到Swap中有壞塊,則在對應的位元映射上標記上0,表示此頁不可用。這樣在使用Swap時,不至於用到壞塊,而使系統產生錯誤。

現在的系統設計者認為:

1. 現在硬碟品質很好,壞塊很少。
2.就算有,也不多,只需要將壞塊羅列出來,而不需要為每一頁建立映射。
3.如果有很多壞塊,就不應該將此硬碟當作Swap空間使用。

於是,現在的Linux取消了位元映射的方法,也就取消了128M的限制。直接用地址訪問,限制為2G。

Swap配置對效能的影響

對於分配太多的Swap空間,會浪費磁碟空間,而Swap空間太少,系統會發生錯誤。

當系統的實體記憶體用光了,系統就會跑得很慢,但仍能運作;如果Swap空間用光了,那麼系統就會發生錯誤。例如,Web伺服器能根據不同的請求數量衍生出多個服務進程(或執行緒),如果Swap空間用完,則服務程序無法啟動,通常會出現「application is out of memory」的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。

一般情況下,Swap空間應大於或等於實體記憶體的大小,最小不得小於64M,通常Swap空間的大小應是物理記憶體的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的伺服器系統則視情況不同需要不同大小的Swap空間。特別是資料庫伺服器和Web伺服器,隨著存取量的增加,對Swap空間的要求也會增加,具體配置請參考各伺服器產品的說明。

此外,Swap分割的數量對效能也有很大的影響。因為Swap交換的操作是磁碟IO的操作,如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作於所有的Swap,這樣會大大平衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處於等待狀態,效率很低。用效能監視工具就會發現,此時的CPU並不很忙,但係統卻慢。這說明,瓶頸在IO上,依賴提高CPU的速度是解決不了問題的。
系統效能監視

Swap空間的分配固然很重要,而係統運作時的效能監控卻更有價值。透過效能監視工具,可以檢查系統的各項效能指標,找到系統效能的瓶頸。本文只介紹在Solaris下和Swap相關的一些指令和用途。

最常用的是Vmstat指令(在大多數Unix平台下都有這樣一些指令),此指令可以查看大多數效能指標。 例如:

vmstat 3

procs memory swap io system cpu 
r b w swpd free buff cache si so bi bo in cs us sy id 
0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99 
0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100 
0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100 
…………

指令說明:

vmstat 後面的參數指定了效能指標擷取的時間間隔。 3表示每三秒鐘捕獲一次。第一行數據不用看,沒有價值,它只反映開機以來的平均性能。從第二行開始,反映每三秒鐘之內的系統效能指標。這些效能指標中和Swap有關的包括以下幾項:

procs下的w

它表示目前(三秒鐘之內)需要釋放記憶體、交換出去的進程數量。

memory下的swpd

它表示使用的Swap空間的大小。

Swap下的si,so

si表示目前(三秒鐘之內)每秒交換回記憶體(Swap in)的總量,單位為kbytes ;so表示當前(三秒鐘之內)每秒交換出記憶體(Swap out)的總量,單位為kbytes。

以上的指標數量越大,表示系統越忙。這些指標所表現的系統繁忙程度,與系統具體的配置有關。系統管理員應該在平時系統正常運作時,記下這些指標的數值,在系統發生問題的時候,再進行比較,就會很快發現問題,並製定本系統正常運作的標準指標值,以供效能監控使用。

另外,使用Swapon-s也能簡單檢視目前Swap資源的使用情況。例如:

swapon -s

Filename Type Size Used Priority

/dev/hda9 partition 361420 0 3

#能夠方便地看出Swap空間的已使用和未使用資源的大小。

應該可以讓Swap負載保持在30%以下,這樣才能確保系統的良好效能。

增加Swap空間,分以下幾步:

1)成為超級使用者

$su - root

2)建立Swap檔案

dd if=/dev/zero of=swapfile bs=1024 count=65536

建立一個有連續空間的交換檔案。

3)啟動Swap檔案

/usr/sbin/swapon swapfile

swapfile指的是上一個步驟所建立的交換檔案。

4)現在新加的Swap檔案已經運作了,但係統重新啟動以後,不會記住前幾步的操作。因此要在/etc/fstab檔案中記錄檔案的名字,和Swap類型,如:

#/path/swapfile none Swap sw,pri=3 0 0

#5)檢驗Swap檔案是否加上

/usr/sbin/swapon -s

刪除多餘的Swap空間。

1)成為超級使用者

2)使用Swapoff指令收回Swap空間。

#/usr/sbin/swapoff swapfile

3)編輯/etc/fstab文件,去掉此Swap檔案的實體。

4)從檔案系統回收此檔案。

#rm swapfile

5)當然,如果此Swap空間不是一個文件,而是一個分區,則需創建一個新的文件系統,再掛接到原來的文件系統上。

相關推薦:

Oracle swap 100%案例分析

如何不讓Oracle使用Linux的swap分區

MySQL如何避免使用Linux的swap分割區而提升讀寫效能

以上是linux下swap分區作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn