Linux的Swap

 
爲何選擇Linux?由於Linux能讓你掌握你所作的一切! 
爲何痛恨Windows?由於Windows讓你不知道本身在作什麼! 
這就是我喜歡Linux的緣由。只要我願意,我能夠將底層的系統運行機制看得清清楚楚,能夠掌握一切。而Windows儘管界面漂亮,卻讓你總也猜不透她內心想什麼。我不喜歡若即若離的感受。 
若是你一看到這個標題就以爲頭疼,或者對Linux的內部技術根本不關心,那麼,我勸你一句:別用Linux了。你只是在追趕潮流,並非真心喜歡它。Linux的確沒有Windows好用,可它比Windows「結實」。若是你對Linux的穩定性感興趣,特別是想把Linux做爲網站服務器的話,那就請看看下文吧! 
Swap,即交換區,除了安裝Linux的時候,有多少人關心過它呢?其實,Swap的調整對Linux服務器,特別是Web服務器的性能相當重要。經過調整Swap,有時能夠越過系統性能瓶頸,節省系統升級費用。 
本文內容包括: 
Swap基本原理 
突破128M Swap限制 
Swap配置對性能的影響 
Swap性能監視 
有關Swap操做的系統命令 
Swap基本原理 
Swap的原理是一個較複雜的問題,須要大量的篇幅來講明。在這裏只做簡單的介紹,在之後的文章中將和你們詳細討論Swap實現的細節。 
衆所周知,現代操做系統都實現了「虛擬內存」這一技術,不但在功能上突破了物理內存的限制,使程序能夠操縱大於實際物理內存的空間,更重要的是,「虛擬內存」是隔離每一個進程的安全保護網,使每一個進程都不受其它程序的干擾。 
Swap空間的做用可簡單描述爲:當系統的物理內存不夠用的時候,就須要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操做的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統老是在物理內存不夠時,才進行Swap交換。 
計算機用戶會常常遇這種現象。例如,在使用Windows系統時,能夠同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬盤「嘩嘩」直響。這是由於這個程序的內存被那些頻繁運行的程序給「偷走」了,放到了Swap區中。所以,一旦此程序被放置到前端,它就會從Swap區取回本身的數據,將其放進內存,而後接着運行。 
須要說明一點,並非全部從物理內存中交換出來的數據都會被放到Swap中(若是這樣的話,Swap就會不堪重負),有至關一部分數據被直接交換到文件系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每一個程序都至少要打開一個文件,那就是運行程序自己),當須要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數據放到Swap空間中了,而能夠直接將其放到文件裏去。若是是讀文件操做,那麼內存數據被直接釋放,不須要交換出來,由於下次須要時,可直接從文件系統恢復;若是是寫文件,只須要將變化的數據保存到文件中,以便恢復。可是那些用malloc和new函數生成的對象的數據則不一樣,它們須要Swap空間,由於它們在文件系統中沒有相應的「儲備」文件,所以被稱做「匿名」(Anonymous)內存數據。這類數據還包括堆棧中的一些狀態和變量數據等。因此說,Swap空間是「匿名」數據的交換空間。 
突破128M Swap限制 
常常看到有些Linux(國內漢化版)安裝手冊上有這樣的說明:Swap空間不能超過128M。爲何會有這種說法?在說明「128M」這個數字的來歷以前,先給問題一個回答:如今根本不存在128M的限制!如今的限制是2G! 
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操做的系統命令 
增長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空間不是一個文件,而是一個分區,則需建立一個新的文件系統,再掛接到原來的文件系統上。
相關文章
相關標籤/搜索