溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)安裝中Swap分區(qū)有什么用

發(fā)布時(shí)間:2021-10-29 10:33:47 來源:億速云 閱讀:344 作者:小新 欄目:系統(tǒng)運(yùn)維

小編給大家分享一下Linux系統(tǒng)安裝中Swap分區(qū)有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

Swap分區(qū),即交換區(qū),Swap空間的作用可簡單描述為:當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當(dāng)前運(yùn)行 的程序使用。那些被釋放的空間可能來自一些很長時(shí)間沒有什么操作的程序,這些被釋放的空間被臨時(shí)保存到Swap空間中,等到那些程序要運(yùn)行時(shí),再從 Swap中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時(shí),才進(jìn)行Swap交換。其實(shí),Swap的調(diào)整對(duì)Linux服務(wù)器,特別是Web服務(wù)器 的性能至關(guān)重要。通過調(diào)整Swap,有時(shí)可以越過系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級(jí)費(fèi)用。

眾所周知,現(xiàn)代操作系統(tǒng)都實(shí)現(xiàn)了“虛擬內(nèi)存”這一技術(shù),不但在功能上突破了物理內(nèi)存的限制,使程序可以操縱大于實(shí)際物理內(nèi)存的空間,更重要的是,“虛擬內(nèi)存”是隔離每個(gè)進(jìn)程的安全保護(hù)網(wǎng),使每個(gè)進(jìn)程都不受其它程序的干擾。

計(jì)算機(jī)用戶會(huì)經(jīng)常遇這種現(xiàn)象。例如,在使用Windows系統(tǒng)時(shí),可以同時(shí)運(yùn)行多個(gè)程序,當(dāng)你切換到一個(gè)很長時(shí)間沒有理會(huì)的程序時(shí),會(huì)聽到硬盤“嘩嘩” 直響。這是因?yàn)檫@個(gè)程序的內(nèi)存被那些頻繁運(yùn)行的程序給“偷走”了,放到了Swap區(qū)中。因此,一旦此程序被放置到前端,它就會(huì)從Swap區(qū)取回自己的數(shù) 據(jù),將其放進(jìn)內(nèi)存,然后接著運(yùn)行。

需要說明一點(diǎn),并不是所有從物理內(nèi)存中交換出來的數(shù)據(jù)都會(huì)被放到Swap中(如果這樣的話,Swap就會(huì)不堪重負(fù)),有相當(dāng)一部分?jǐn)?shù)據(jù)被直接交換到文件 系統(tǒng)。例如,有的程序會(huì)打開一些文件,對(duì)文件進(jìn)行讀寫(其實(shí)每個(gè)程序都至少要打開一個(gè)文件,那就是運(yùn)行程序本身),當(dāng)需要將這些程序的內(nèi)存空間交換出去 時(shí),就沒有必要將文件部分的數(shù)據(jù)放到Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那么內(nèi)存數(shù)據(jù)被直接釋放,不需要交換出來,因?yàn)橄?次需要時(shí),可直接從文件系統(tǒng)恢復(fù);如果是寫文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復(fù)。但是那些用malloc和new函數(shù)生成的對(duì)象的數(shù)據(jù)則不 同,它們需要Swap空間,因?yàn)樗鼈冊(cè)谖募到y(tǒng)中沒有相應(yīng)的“儲(chǔ)備”文件,因此被稱作“匿名”(Anonymous)內(nèi)存數(shù)據(jù)。這類數(shù)據(jù)還包括堆棧中的一 些狀態(tài)和變量數(shù)據(jù)等。所以說,Swap空間是“匿名”數(shù)據(jù)的交換空間。

突破128M Swap限制

經(jīng)常看到有些Linux(國內(nèi)漢化版)安裝手冊(cè)上有這樣的說明:Swap空間不能超過128M。為什么會(huì)有這種說法?在說明“128M”這個(gè)數(shù)字的來歷之前,先給問題一個(gè)回答:現(xiàn)在根本不存在128M的限制!現(xiàn)在的限制是2G!

Swap空間是分頁的,每一頁的大小和內(nèi)存頁的大小一樣,方便Swap空間和內(nèi)存之間的數(shù)據(jù)交換。舊版本的Linux實(shí)現(xiàn)Swap空間時(shí),用Swap空 間的***頁作為所有Swap空間頁的一個(gè)“位映射”(Bit map)。這就是說***頁的每一位,都對(duì)應(yīng)著一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這么說來, ***個(gè)Swap映射位應(yīng)該是0,因?yàn)椋?**頁Swap是映射頁。另外,***10個(gè)映射位也被占用,用來表示Swap的版本(原來的版本是 Swap_space ,現(xiàn)在的版本是swapspace2)。那么,如果說一頁的大小為s,這種Swap的實(shí)現(xiàn)方法共能管理“8 * ( s - 10 ) - 1”個(gè)Swap頁。對(duì)于i386系統(tǒng)來說s=4096,則空間大小共為133890048,如果認(rèn)為1 MB=2^20 Byte的話,大小正好為128M。

Swap配置對(duì)性能的影響

分配太多的Swap空間會(huì)浪費(fèi)磁盤空間,而Swap空間太少,則系統(tǒng)會(huì)發(fā)生錯(cuò)誤。

如果系統(tǒng)的物理內(nèi)存用光了,系統(tǒng)就會(huì)跑得很慢,但仍能運(yùn)行;如果Swap空間用光了,那么系統(tǒng)就會(huì)發(fā)生錯(cuò)誤。例如,Web服務(wù)器能根據(jù)不同的請(qǐng)求數(shù)量衍 生出多個(gè)服務(wù)進(jìn)程(或線程),如果Swap空間用完,則服務(wù)進(jìn)程無法啟動(dòng),通常會(huì)出現(xiàn)“application is out of memory”的錯(cuò)誤,嚴(yán)重時(shí)會(huì)造成服務(wù)進(jìn)程的死鎖。因此Swap空間的分配是很重要的。

通常情況下,Swap空間應(yīng)大于或等于物理內(nèi)存的大小,最小不應(yīng)小于64M,通常Swap空間的大小應(yīng)是物理內(nèi)存的2-2.5倍。但根據(jù)不同的應(yīng)用,應(yīng) 有不同的配置:如果是小的桌面系統(tǒng),則只需要較小的Swap空間,而大的服務(wù)器系統(tǒng)則視情況不同需要不同大小的Swap空間。特別是數(shù)據(jù)庫服務(wù)器和Web 服務(wù)器,隨著訪問量的增加,對(duì)Swap空間的要求也會(huì)增加,具體配置參見各服務(wù)器產(chǎn)品的說明。

另外,Swap分區(qū)的數(shù)量對(duì)性能也有很大的影響。因?yàn)镾wap交換的操作是磁盤IO的操作,如果有多個(gè)Swap交換區(qū),Swap空間的分配會(huì)以輪流的方 式操作于所有的Swap,這樣會(huì)大大均衡IO的負(fù)載,加快Swap交換的速度。如果只有一個(gè)交換區(qū),所有的交換操作會(huì)使交換區(qū)變得很忙,使系統(tǒng)大多數(shù)時(shí)間 處于等待狀態(tài),效率很低。用性能監(jiān)視工具就會(huì)發(fā)現(xiàn),此時(shí)的CPU并不很忙,而系統(tǒng)卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。

建立一個(gè)有連續(xù)空間的空白文件

服務(wù)器的物理內(nèi)存是512MB,按照1.5~2倍原則,我將swap文件設(shè)置為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  #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命令讓系統(tǒng)使用這個(gè)文件作為swap文件。但是這個(gè)文件不能直接使用,否則會(huì)報(bào)錯(cuò):

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

必須先使用mkswap將文件格式化成swap格式(不知道為什么會(huì)少了4KB):

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# mkswap SWAPFILE 1048576  Setting up swapspace version 1, size = 1048572 KiB  no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f

使用格式化完畢的文件:

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

查看文件使用情況:

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

加入自動(dòng)啟用

為避免重啟后swapfile生效,可以將啟用swap的代碼加入啟動(dòng)文件中,對(duì)于ubuntu server,編輯/etc/rc.local文件,加入以下內(nèi)容(具體文件路徑自定):

swapon /srv/SWAPFILE  swapon /srv/SWAPFILE

或者

修改/etc/fstab文件,加入以下內(nèi)容:

/srv/SWAPFILE swap swap defaults 0 0  /srv/SWAPFILE   swap    swap    defaults        0       0

看完了這篇文章,相信你對(duì)“Linux系統(tǒng)安裝中Swap分區(qū)有什么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI