您好,登錄后才能下訂單哦!
Linux swap分區(qū)的示例分析,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
swap space是磁盤(pán)上的一塊區(qū)域,可以是一個(gè)分區(qū),也可以是一個(gè)文件,或者是他們的組合。簡(jiǎn)單點(diǎn)說(shuō),當(dāng)系統(tǒng)物理內(nèi)存吃緊時(shí),Linux會(huì)將內(nèi)存中不常訪(fǎng)問(wèn)的數(shù)據(jù)保存到swap上,這樣系統(tǒng)就有更多的物理內(nèi)存為各個(gè)進(jìn)程服務(wù),而當(dāng)系統(tǒng)需要訪(fǎng)問(wèn)swap上存儲(chǔ)的內(nèi)容時(shí),再將swap上的數(shù)據(jù)加載到內(nèi)存中,這就是我們常說(shuō)的swap out和swap in。
要回答這個(gè)問(wèn)題,就需要回答swap給我們帶來(lái)了哪些好處。
上面介紹了swap的優(yōu)點(diǎn),那swap的缺點(diǎn)呢?swap是存放在磁盤(pán)上的,磁盤(pán)的速度和內(nèi)存比較起來(lái)慢了好幾個(gè)數(shù)量級(jí),如果不停的讀寫(xiě)swap,那么對(duì)系統(tǒng)的性能肯定有影響,尤其是當(dāng)系統(tǒng)內(nèi)存很吃緊的時(shí)候,讀寫(xiě)swap空間發(fā)生的頻率會(huì)很高,導(dǎo)致系統(tǒng)運(yùn)行很慢,像死了一樣,這個(gè)時(shí)候添加物理內(nèi)存是唯一的解決辦法。
由于系統(tǒng)會(huì)自動(dòng)將不常用的內(nèi)存數(shù)據(jù)移到swap上,對(duì)桌面程序來(lái)說(shuō),有可能會(huì)導(dǎo)致最小化一個(gè)程序后,再打開(kāi)時(shí)小卡一下,因?yàn)樾枰獙wap上的數(shù)據(jù)重新加載到內(nèi)存中來(lái)。
上面介紹了什么是swap以及它們的優(yōu)缺點(diǎn),那么到底要不要配置swap呢?答案是:看情況。
下面分別討論內(nèi)存不夠用、內(nèi)存勉強(qiáng)夠用和內(nèi)存很充裕這三種情況下服務(wù)器和桌面環(huán)境對(duì)swap的選擇。
不管是桌面還是服務(wù)器,當(dāng)物理內(nèi)存明顯不夠用,而又想跑程序的話(huà),添加swap是唯一的選擇,慢點(diǎn)總比不能工作強(qiáng)。
建議配置swap,這樣內(nèi)核會(huì)將不常用的數(shù)據(jù)從內(nèi)存移到swap上,從而有更多的物理內(nèi)存供系統(tǒng)調(diào)用,提升系統(tǒng)性能,同時(shí)也避免因偶爾的物理內(nèi)存不夠造成進(jìn)程異常退出,提升系統(tǒng)穩(wěn)定性,但對(duì)服務(wù)器來(lái)說(shuō),一定要限制或者監(jiān)控swap空間的使用情況,當(dāng)出現(xiàn)swap空間使用超預(yù)期或者swap in/out頻繁時(shí),要及時(shí)采取措施,不然對(duì)性能影響很大
理論上來(lái)說(shuō),如果物理內(nèi)存足夠多并且不需要休眠功能,那swap就沒(méi)什么用,可關(guān)鍵問(wèn)題是我們很難保證物理內(nèi)存在任何情況下都?jí)蛴?,因?yàn)榭傆幸庀氩坏降那闆r發(fā)生,比如某些進(jìn)程耗內(nèi)存超預(yù)期,服務(wù)器壓力超預(yù)期,內(nèi)存泄漏等。
在內(nèi)存充裕的這種情況下,如果發(fā)生異常,swap能幫到我們嗎?
桌面環(huán)境
一般不會(huì)開(kāi)什么監(jiān)控功能,所以也沒(méi)法提前預(yù)知內(nèi)存使用異常,當(dāng)內(nèi)存被用光的時(shí)候,分兩種情況:
服務(wù)器環(huán)境
服務(wù)器一般都會(huì)配置監(jiān)控程序,當(dāng)內(nèi)存用量達(dá)到一個(gè)閾值的時(shí)候告警或者會(huì)自動(dòng)重啟異常的進(jìn)程。但如果沒(méi)有監(jiān)控呢?當(dāng)內(nèi)存被用光的時(shí)候,分兩種情況:
從上面可以看出,對(duì)服務(wù)器來(lái)說(shuō),似乎不配置swap更好,可以讓有問(wèn)題的進(jìn)程盡快重啟,縮短業(yè)務(wù)受影響的時(shí)間。
并且,就算沒(méi)有配置監(jiān)控程序,我們還有cgroups中的內(nèi)存控制模塊,可以控制一組進(jìn)程所能使用的最大內(nèi)存數(shù),當(dāng)超過(guò)這個(gè)數(shù)的時(shí)候,可以觸發(fā)相應(yīng)的行為,比如重啟進(jìn)程等。
總的來(lái)說(shuō),對(duì)于桌面環(huán)境來(lái)說(shuō),一般內(nèi)存沒(méi)有服務(wù)器端那么充裕,并且由于使用場(chǎng)景原因,會(huì)打開(kāi)很多不同類(lèi)型的GUI窗口,但前臺(tái)的進(jìn)程只有一個(gè),大部分都是在后臺(tái)待命,所以配置swap對(duì)提升性能還是有必要的;對(duì)于服務(wù)器來(lái)說(shuō),配置的內(nèi)存都比較充裕,啟動(dòng)起來(lái)的進(jìn)程也都是要干活的進(jìn)程(不然就不應(yīng)該被啟動(dòng)起來(lái)),并且也沒(méi)有休眠的需求,再加上有了cgroups之后,可以更輕松的限制進(jìn)程的內(nèi)存使用,個(gè)人認(rèn)為配置swap基本沒(méi)什么必要了,看看coreos,默認(rèn)就沒(méi)有swap。
既然配置swap對(duì)桌面系統(tǒng)有幫助,那么配置多少大小的swap比較合適呢?下面是ubuntu給出的建議:
下面是詳細(xì)的不同物理內(nèi)存情況下的建議,第一列是物理內(nèi)存的大小,第二列和第三列是不需要和需要休眠兩種情況下推薦的大小,第四列是不要超過(guò)的最大值
物理內(nèi)存(MB) 不需要休眠 需要休眠 最大值 256 256 512 512 512 512 1024 1024 1024 1024 2048 2048 物理內(nèi)存(GB) 不需要休眠 需要休眠 最大值 1 1 2 2 2 1 3 4 3 2 5 6 4 2 6 8 5 2 7 10 6 2 8 12 8 3 11 16 12 3 15 24 16 4 20 32 24 5 29 48 32 6 38 64 64 8 72 128 128 11 139 256
當(dāng)我們確定好配置多大的swap空間后,具體應(yīng)該怎么配置呢?當(dāng)然可以在系統(tǒng)安裝的時(shí)候分配好,但如果對(duì)安裝時(shí)分配的大小不滿(mǎn)意,我們還可以在后面進(jìn)行調(diào)整。在這里將不介紹安裝的時(shí)候怎么配,只介紹如何往系統(tǒng)中添加更多的swap空間。
Linux下有兩種類(lèi)型的swap空間,swap分區(qū)和swap文件,他們有各自的特點(diǎn):
dxt@DXT:~/QiuZhao/SharedMem/ShareMem$ free -m total used free shared buff/cache availableMem: 3845 2986 120 411 737 143Swap: 3904 1540 2364
或者:
使用命令swapon -s即可查看系統(tǒng)中在用的swap
dev@dev:~$ swapon -sFilename Type Size Used Priority/dev/dm-1 partition 524284 0 -1
如果配置有多個(gè)swap分區(qū)或者文件的話(huà),這里將會(huì)有多行,每行代表一個(gè)正在被系統(tǒng)使用的swap分區(qū)或文件,下面是每個(gè)字段的意思:
并不是swap空間占用多就一定性能下降,真正影響性能是swap in和out的頻率,頻率越高,對(duì)系統(tǒng)的性能影響越大,我們可以通過(guò)vmstat命令來(lái)查看swap in/out的頻率
#參數(shù)2表示每?jī)擅虢y(tǒng)計(jì)一次,si和so兩列就是每秒swap in和out的次數(shù)dev@ubuntu:~$ vmstat 2procs------------memory--------------swap----io-----system-----------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 70232 75620 7940 209476 0 0 0 0 111 180 0 1 99 0 0 0 0 70232 75620 7940 209476 0 0 0 0 116 186 1 1 99 0 0 0 0 70228 75620 7940 209476 2 0 2 0 120 193 1 1 98 1 0 0 0 70228 75620 7940 209476 0 0 0 0 117 186 0 0 100 0 0 0 0 70228 75620 7940 209476 0 0 0 0 113 184 0 1 99 0 0
在添加swap分區(qū)前,首先得有一個(gè)空閑的分區(qū),如果是一塊新的磁盤(pán),可以用fdisk來(lái)創(chuàng)建一個(gè)新的分區(qū)用于swap。
注意:磁盤(pán)分區(qū)操作一定要小心,弄不好就會(huì)造成數(shù)據(jù)丟失、系統(tǒng)掛掉的后果。磁盤(pán)分區(qū)操作不是本篇要介紹的內(nèi)容,所以這里不會(huì)討論fdisk怎么用。
#本篇使用的測(cè)試環(huán)境是虛擬機(jī),/dev/sdb是一塊新加的硬盤(pán)并且已經(jīng)用fdisk創(chuàng)建好了一個(gè)分區(qū)#本例中將使用/dev/sdb1這個(gè)分區(qū)dev@dev:~$ sudo fdisk -l /dev/sdbDevice Boot Start End Sectors Size Id Type/dev/sdb1 2048 4194303 4192256 2G 83 Linux #創(chuàng)建swap分區(qū)dev@dev:~$ sudo mkswap /dev/sdb1Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40 #查看系統(tǒng)中現(xiàn)在正在使用的swap,以便于和添加后做比較dev@dev:~$ swapon -sFilename Type Size Used Priority/dev/dm-1 partition 524284 0 -1 #將新的分區(qū)加入到系統(tǒng)中dev@dev:~$ sudo swapon /dev/sdb1 #這時(shí)候可以看到新的swap分區(qū)已經(jīng)被加入到系統(tǒng)中了,并且優(yōu)先級(jí)比原來(lái)的要低dev@dev:~$ swapon -sFilename Type Size Used Priority/dev/dm-1 partition 524284 0 -1/dev/sdb1 partition 2096124 0 -2 #為了保證系統(tǒng)重啟后會(huì)自動(dòng)加載我們新的swap分區(qū),需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/dev/sdb1 none swap sw 0 0" >> /etc/fstab'#查看一下,確保寫(xiě)入成功,這里的第一條是原來(lái)的系統(tǒng)的swap分區(qū),第二條是我們剛添加的dev@dev:~$ grep swap /etc/fstab/dev/mapper/dev--vg-swap_1 none swap sw 0 0/dev/sdb1 none swap sw 0 0
添加swap文件就簡(jiǎn)單多了,也沒(méi)有分區(qū)操作那么有風(fēng)險(xiǎn)。
#先創(chuàng)建一個(gè)新的512M的文件,用來(lái)作為swap文件,文件路徑可以隨便#fallocate這個(gè)命令依賴(lài)于文件系統(tǒng),有些老的文件系統(tǒng)不支持這個(gè)命令,比如ext2,#這種情況下可以用dd來(lái)實(shí)現(xiàn)同樣的效果:#sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288#fallocate和dd的區(qū)別在于:#fallocate是先聲明這么多,然后在具體用到的時(shí)候文件系統(tǒng)才分配真正的物理磁盤(pán)空間,就是用一點(diǎn)分配一點(diǎn),#而dd是一開(kāi)始就實(shí)實(shí)在在的寫(xiě)了512m的數(shù)據(jù)到物理磁盤(pán)空間。#所以作為測(cè)試來(lái)說(shuō)fallocate方便些,因?yàn)閯傞_(kāi)始不用寫(xiě)任何數(shù)據(jù),要快dev@dev:~$ sudo fallocate -l 512m /mnt/512MiB.swap #修改文件的權(quán)限,避免其他用戶(hù)對(duì)這個(gè)文件進(jìn)行誤操作dev@dev:~$ sudo chmod 600 /mnt/512MiB.swap #格式化為swap文件dev@dev:~$ sudo mkswap /mnt/512MiB.swap #將新的文件加入到系統(tǒng)中dev@dev:~$ sudo swapon /mnt/512MiB.swap #這時(shí)候可以看到新的swap文件已經(jīng)被加入到系統(tǒng)中了,類(lèi)型為file#這里可以看到由于優(yōu)先級(jí)最高,第一個(gè)swap分區(qū)/dev/dm-1已經(jīng)被使用了24Kdev@dev:~$ swapon -sFilename Type Size Used Priority/dev/dm-1 partition 524284 24 -1/dev/sdb1 partition 2096124 0 -2/mnt/512MiB.swap file 524284 0 -3 #從free命令的輸出可以看到,經(jīng)過(guò)前面兩輪添加swap分區(qū)和文件,#現(xiàn)在系統(tǒng)的交換空間已經(jīng)變成3G(3144692K)了dev@dev:~$ free total used free shared buff/cache availableMem: 500192 39112 9564 1996 451516 430820Swap: 3144692 24 3144668 #同樣為了保證系統(tǒng)重啟后會(huì)自動(dòng)加載我們新的swap文件,需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none swap sw 0 0" >> /etc/fstab'
注意:不是所有的文件系統(tǒng)都支持創(chuàng)建swap文件,如btrfs,在btrfs分區(qū)里創(chuàng)建swap文件將失敗。
如果經(jīng)過(guò)深思熟慮之后,確定不再需要swap,那么可以將所有的swap分區(qū)和文件從系統(tǒng)中移除,步驟和上面的剛好相反
#停掉所有系統(tǒng)正在使用的swapdev@dev:~$ sudo swapoff -a #swapon -s命令沒(méi)有任何輸出,free命令顯示swap空間為0,說(shuō)明swapoff成功dev@dev:~$ swapon -sdev@dev:~$ free total used free shared buff/cache availableMem: 500192 35924 348888 2004 115380 433924Swap: 0 0 0 #當(dāng)然我們還需要修改/etc/fstab,否則下次重啟后,系統(tǒng)又會(huì)重新掛載相應(yīng)的swap分區(qū)和文件#使用自己喜歡的編輯器,將/etc/fstab中跟swap相關(guān)的三行刪掉即可(本例中是三行,請(qǐng)根據(jù)實(shí)際情況調(diào)整)
怎么配置swap可以讓它的性能更好呢?
不過(guò)話(huà)又說(shuō)回來(lái)了,如果頻繁的訪(fǎng)問(wèn)swap的話(huà),怎么優(yōu)化swap都沒(méi)用,跟內(nèi)存比還是低幾個(gè)數(shù)量級(jí),性能還是下降的厲害,如果不頻繁訪(fǎng)問(wèn)swap的話(huà),優(yōu)化swap又有啥意義呢?所以其實(shí)優(yōu)化swap性能的實(shí)際意義不大,這里了解一下就好。
有時(shí)我們桌面環(huán)境確實(shí)配置了比較充裕的內(nèi)存,并且也配置了swap空間,這個(gè)時(shí)候就希望盡量減少swap空間的使用,避免對(duì)系統(tǒng)性能造成影響,Linux早就幫我們考慮到這種情況了,在2.6內(nèi)核中,增加了一個(gè)叫做swappiness的參數(shù),用于配置需要將內(nèi)存中不常用的數(shù)據(jù)移到swap中去的緊迫程度。這個(gè)參數(shù)的取值范圍是0~100,0告訴內(nèi)核盡可能的不要將內(nèi)存數(shù)據(jù)移到swap中,也即只有在迫不得已的情況下才這么做,而100告訴內(nèi)核只要有可能,盡量的將內(nèi)存中不常訪(fǎng)問(wèn)的數(shù)據(jù)移到swap中。
Ubuntu的desktop和server的默認(rèn)配置都是60(可能會(huì)隨著版本變化),對(duì)于桌面環(huán)境來(lái)說(shuō),界面的響應(yīng)速度直接關(guān)系到系統(tǒng)的流暢程度,如果內(nèi)存比較充裕的話(huà),可以將這個(gè)值設(shè)置的小一點(diǎn),這樣就盡可能的把數(shù)據(jù)留在內(nèi)存中,從而喚醒后臺(tái)界面程序會(huì)更快一些,Ubuntu desktop建議將該值設(shè)置為10,當(dāng)然大家可以根據(jù)swap空間的實(shí)際使用情況,任意調(diào)整這個(gè)參數(shù),直到自己滿(mǎn)意的水平為止。對(duì)于服務(wù)器來(lái)說(shuō),主要性能衡量標(biāo)準(zhǔn)是整體的處理能力,而不是具體某一次的響應(yīng)速度,能把更多的內(nèi)存用來(lái)做I/O cache可能效果更好,所以Ubuntu server建議保持60的默認(rèn)值。
dev@dev:~$ cat /proc/sys/vm/swappiness60
dev@dev:~$ sudo sysctl vm.swappiness=10vm.swappiness = 10dev@dev:~$ cat /proc/sys/vm/swappiness10
上面通過(guò)sysctl修改的swappiness值在系統(tǒng)重啟后會(huì)失效,要想重啟后繼續(xù)生效,需要修改配置文件/etc/sysctl.conf,將下面這行修改成10,如果文件中找不到這行的話(huà),在文件末位加上這行就可以了
vm.swappiness=10
Linux是一種免費(fèi)使用和自由傳播的類(lèi)UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶(hù)、多任務(wù)、支持多線(xiàn)程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。
關(guān)于Linux swap分區(qū)的示例分析問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。