關於Linux系統安裝中Swap分區的解釋

Swap分區,即交換區,Swap空間的做用可簡單描述爲:當系統的物理內存不夠用的時候,就須要將物理內存中的一部分空間釋放出來,以供當前運行 的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操做的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從 Swap中恢復保存的數據到內存中。這樣,系統老是在物理內存不夠時,才進行Swap交換。其實,Swap的調整對Linux服務器,特別是Web服務器 的性能相當重要。經過調整Swap,有時能夠越過系統性能瓶頸,節省系統升級費用。

   衆所周知,現代操做系統都實現了「虛擬內存」這一技術,不但在功能上突破了物理內存的限制,使程序能夠操縱大於實際物理內存的空間,更重要的是,「虛擬內存」是隔離每一個進程的安全保護網,使每一個進程都不受其它程序的干擾。 前端

   計算機用戶會常常遇這種現象。例如,在使用Windows系統時,能夠同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬盤「嘩嘩」 直響。這是由於這個程序的內存被那些頻繁運行的程序給「偷走」了,放到了Swap區中。所以,一旦此程序被放置到前端,它就會從Swap區取回本身的數 據,將其放進內存,而後接着運行。 數據庫

   須要說明一點,並非全部從物理內存中交換出來的數據都會被放到Swap中(若是這樣的話,Swap就會不堪重負),有至關一部分數據被直接交換到文件 系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每一個程序都至少要打開一個文件,那就是運行程序自己),當須要將這些程序的內存空間交換出去 時,就沒有必要將文件部分的數據放到Swap空間中了,而能夠直接將其放到文件裏去。若是是讀文件操做,那麼內存數據被直接釋放,不須要交換出來,由於下 次須要時,可直接從文件系統恢復;若是是寫文件,只須要將變化的數據保存到文件中,以便恢復。可是那些用malloc和new函數生成的對象的數據則不 同,它們須要Swap空間,由於它們在文件系統中沒有相應的「儲備」文件,所以被稱做「匿名」(Anonymous)內存數據。這類數據還包括堆棧中的一 些狀態和變量數據等。因此說,Swap空間是「匿名」數據的交換空間。 ubuntu

   突破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。 app

 Swap配置對性能的影響 函數

   分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。 工具

   若是系統的物理內存用光了,系統就會跑得很慢,但仍能運行;若是Swap空間用光了,那麼系統就會發生錯誤。例如,Web服務器能根據不一樣的請求數量衍 生出多個服務進程(或線程),若是Swap空間用完,則服務進程沒法啓動,一般會出現「application is out of memory」的錯誤,嚴重時會形成服務進程的死鎖。所以Swap空間的分配是很重要的。 性能

   一般狀況下,Swap空間應大於或等於物理內存的大小,最小不該小於64M,一般Swap空間的大小應是物理內存的2-2.5倍。但根據不一樣的應用,應 有不一樣的配置:若是是小的桌面系統,則只須要較小的Swap空間,而大的服務器系統則視狀況不一樣須要不一樣大小的Swap空間。特別是數據庫服務器和Web 服務器,隨着訪問量的增長,對Swap空間的要求也會增長,具體配置參見各服務器產品的說明。 spa

   另外,Swap分區的數量對性能也有很大的影響。由於Swap交換的操做是磁盤IO的操做,若是有多個Swap交換區,Swap空間的分配會以輪流的方 式操做於全部的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。若是隻有一個交換區,全部的交換操做會使交換區變得很忙,使系統大多數時間 處於等待狀態,效率很低。用性能監視工具就會發現,此時的CPU並不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提升CPU的速度是解決不了問題的。

創建一個有連續空間的空白文件

服務器的物理內存是512MB,按照1.5~2倍原則,我將swap文件設置爲1GB。

#root @aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 59.7957 s, 18.0 MB/s
1
2
3
4
#root@aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576
1048576 + 0 records in
1048576 + 0 records out
1073741824 bytes ( 1.1 GB ) copied , 59.7957 s , 18.0 MB / s

使用swap文件

使用swapon命令讓系統使用這個文件做爲swap文件。可是這個文件不能直接使用,不然會報錯:

root @aliyun :/srv# swapon swapfile swapon: /srv/swapfile: read swap header failed: Invalid argument
1
2
root @ aliyun : / srv # swapon swapfile
swapon : / srv / swapfile : read swap header failed : Invalid argument

必須先使用mkswap將文件格式化成swap格式(不知道爲何會少了4KB):

root @aliyun :/srv# mkswap SWAPFILE 1048576 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f
1
2
3
root @ aliyun : / srv # mkswap SWAPFILE 1048576
Setting up swapspace version 1 , size = 1048572 KiB
no label , UUID = 1aaed031 - 33ef - 479b - a9a4 - 2f008a7bbb2f

使用格式化完畢的文件:

root @aliyun :/srv# swapon SWAPFILE
1
root @ aliyun : / srv # swapon SWAPFILE

查看文件使用狀況:

root@aliyun:/srv# swapon -s Filename Type Size Used Priority /srv/SWAPFILE file 1048572 95852 -1
1
2
3
root @ aliyun : / srv # swapon -s
Filename                                 Type             Size     Used     Priority
/ srv / SWAPFILE                           file              1048572 95852    - 1

加入自動啓用

爲避免重啓後swapfile生效,能夠將啓用swap的代碼加入啓動文件中,對於ubuntu server,編輯/etc/rc.local文件,加入如下內容(具體文件路徑自定):

swapon /srv/SWAPFILE
1
swapon / srv / SWAPFILE

或者

修改/etc/fstab文件,加入如下內容:

/srv/SWAPFILE swap swap defaults 0 0
1
/ srv / SWAPFILE   swap     swap     defaults          0        0
相關文章
相關標籤/搜索