如何合理設定Linux的swap分區

來源:互聯網
上載者:User
什麼是Swap?
Swap,即交換區,除了安裝Linux的時候,有多少人關心過它呢?其實,Swap的調整對Linux伺服器,特別是Web伺服器的效能至關重要。通過調整Swap,有時可以越過系統效能瓶頸,節省系統升級費用。Swap的原理是一個較複雜的問題,需要大量的篇幅來說明。在這裡只作簡單的介紹,在以後的文章中將和大家詳細討論Swap實現的細節。眾所周知,現代作業系統都實現了“虛擬記憶體”這一技術,不但在功能上突破了實體記憶體的限制,使程式可以操縱大於實際實體記憶體的空間,更重要的是,“虛擬記憶體”是隔離每個進程的安全保護網,使每個進程都不受其它程式的幹擾。Swap空間的作用可簡單描述為:當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前啟動並執行程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到Swap空間中,等到那些程式要運行時,再從Swap中恢複儲存的資料到記憶體中。這樣,系統總是在實體記憶體不夠時,才進行Swap交換。電腦使用者會經常遇這種現象。例如,在使用Windows系統時,可以同時運行多個程式,當你切換到一個很長時間沒有理會的程式時,會聽到硬碟“嘩嘩”直響。這是因為這個程式的記憶體被那些頻繁啟動並執行程式給“偷走”了,放到了Swap區中。因此,一旦此程式被放置到前端,它就會從Swap區取回自己的資料,將其放進記憶體,然後接著運行。需要說明一點,並不是所有從實體記憶體中交換出來的資料都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分資料被直接交換到檔案系統。例如,有的程式會開啟一些檔案,對檔案進行讀寫(其實每個程式都至少要開啟一個檔案,那就是運行程式本身),當需要將這些程式的記憶體空間交換出去時,就沒有必要將檔案部分的資料放到Swap空間中了,而可以直接將其放到檔案裡去。如果是讀檔案操作,那麼記憶體資料被直接釋放,不需要交換出來,因為下次需要時,可直接從檔案系統恢複;如果是寫檔案,只需要將變化的資料儲存到檔案中,以便恢複。但是那些用malloc和new函數產生的對象的資料則不同,它們需要Swap空間,因為它們在檔案系統中沒有相應的“儲備”檔案,因此被稱作“匿名”(Anonymous)記憶體資料。這類資料還包括堆棧中的一些狀態和變數資料等。所以說,Swap空間是“匿名”資料的交換空間。
如何設定Swap分區大小
我記得曾經有人對Swap分區大小的設定這樣評論過:“只要不怕浪費硬碟的話越大越好,因為linux核心在實體記憶體完全用完之前不會去動swap”不過根據我的經驗,可能不是這樣喔!太大的 swap 空間會造成 kernel 以為有巨大的記憶體空間而毫不節制的想要把資料捉進記憶體中,從而導致 kernel 一直在做 memory swap,連帶拖慢系統回應時間。
老實說,1G RAM 如果不跑 p2p 之類的東西,那設個 256MB 就夠用了;有 2G 的話連設都不要設。
另外如果說真的因為某一軟體確實需要巨大記憶體空間才能運作的話,那隻好在 swap 上動手腳,但為了效能最好分散在多個實體硬碟上(等於類似 raid 效果)!其實如何設定Swap分區的大小是最能檢查一個Linux系統管理員的水平的測試,Swap到底該如何設定呢?我是這樣認為的:首先我們需要瞭解這台伺服器都要運行哪些程式、他們各自佔用的記憶體大小為多少,經過確切的檢查後,Swap分區的大小可以這樣確定:( 記憶體大小 + Swap分區大小 ) * 80%或70% = 程式需要佔用總記憶體數Swap分區在程式測試期間也有很大的用途,例如管理員能夠通過Swap分區的使用狀況,監測系統記憶體是否出現泄露,同時對Web項目等應用也可以提供一個比較好的流量峰值緩衝作用。一個Linux系統管理員要能夠通過監測Swap分區的使用方式,對系統、程式有一個合理的評價。
系統效能監控 
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空間不是一個檔案,而是一個分區,則需建立一個新的檔案系統,再掛接到原來的檔案系統上。

本文出自 “玄武·巴依” 部落格,請務必保留此出處http://commandos.blog.51cto.com/154976/115288

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.