亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux swap分區的示例分析

發布時間:2022-01-21 10:45:41 來源:億速云 閱讀:97 作者:柒染 欄目:開發技術

Linux swap分區的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

什么是swap?

swap space是磁盤上的一塊區域,可以是一個分區,也可以是一個文件,或者是他們的組合。簡單點說,當系統物理內存吃緊時,Linux會將內存中不常訪問的數據保存到swap上,這樣系統就有更多的物理內存為各個進程服務,而當系統需要訪問swap上存儲的內容時,再將swap上的數據加載到內存中,這就是我們常說的swap out和swap in。

為什么需要swap?

要回答這個問題,就需要回答swap給我們帶來了哪些好處。

  • 對于一些大型的應用程序(如LibreOffice、video editor等),在啟動的過程中會使用大量的內存,但這些內存很多時候只是在啟動的時候用一下,后面的運行過程中很少再用到這些內存。有了swap后,系統就可以將這部分不這么使用的內存數據保存到swap上去,從而釋放出更多的物理內存供系統使用。
  • 很多發行版(如ubuntu)的休眠功能依賴于swap分區,當系統休眠的時候,會將內存中的數據保存到swap分區上,等下次系統啟動的時候,再將數據加載到內存中,這樣可以加快系統的啟動速度,所以如果要使用休眠的功能,必須要配置swap分區,并且大小一定要大于等于物理內存
  • 在某些情況下,物理內存有限,但又想運行耗內存的程序怎么辦?這時可以通過配置足夠的swap空間來達到目標,雖然慢一點,但至少可以運行。
  • 雖然大部分情況下,物理內存都是夠用的,但是總有一些意想不到的狀況,比如某個進程需要的內存超過了預期,或者有進程存在內存泄漏等,當內存不夠的時候,就會觸發內核的OOM killer,根據OOM killer的配置,某些進程會被kill掉或者系統直接重啟(默認情況是優先kill耗內存最多的那個進程),不過有了swap后,可以拿swap當內存用,雖然速度慢了點,但至少給了我們一個去debug、kill進程或者保存當前工作進度的機會。
  • 如果看過Linux內存管理,就會知道系統會盡可能多的將空閑內存用于cache,以加快系統的I/O速度,所以如果能將不怎么常用的內存數據移動到swap上,就會有更多的物理內存用于cache,從而提高系統整體性能。

swap的缺點?

上面介紹了swap的優點,那swap的缺點呢?swap是存放在磁盤上的,磁盤的速度和內存比較起來慢了好幾個數量級,如果不停的讀寫swap,那么對系統的性能肯定有影響,尤其是當系統內存很吃緊的時候,讀寫swap空間發生的頻率會很高,導致系統運行很慢,像死了一樣,這個時候添加物理內存是唯一的解決辦法。

由于系統會自動將不常用的內存數據移到swap上,對桌面程序來說,有可能會導致最小化一個程序后,再打開時小卡一下,因為需要將swap上的數據重新加載到內存中來。

到底要不要swap?

上面介紹了什么是swap以及它們的優缺點,那么到底要不要配置swap呢?答案是:看情況。

下面分別討論內存不夠用、內存勉強夠用和內存很充裕這三種情況下服務器和桌面環境對swap的選擇。

內存不夠用

不管是桌面還是服務器,當物理內存明顯不夠用,而又想跑程序的話,添加swap是唯一的選擇,慢點總比不能工作強。

內存勉強夠用

建議配置swap,這樣內核會將不常用的數據從內存移到swap上,從而有更多的物理內存供系統調用,提升系統性能,同時也避免因偶爾的物理內存不夠造成進程異常退出,提升系統穩定性,但對服務器來說,一定要限制或者監控swap空間的使用情況,當出現swap空間使用超預期或者swap in/out頻繁時,要及時采取措施,不然對性能影響很大

內存充裕

理論上來說,如果物理內存足夠多并且不需要休眠功能,那swap就沒什么用,可關鍵問題是我們很難保證物理內存在任何情況下都夠用,因為總有意想不到的情況發生,比如某些進程耗內存超預期,服務器壓力超預期,內存泄漏等。

在內存充裕的這種情況下,如果發生異常,swap能幫到我們嗎?

桌面環境

一般不會開什么監控功能,所以也沒法提前預知內存使用異常,當內存被用光的時候,分兩種情況:

  • 配置了swap:在系統變慢的時候能感覺到,可能還有機會殺掉一些進程和保存當前工作進度,當然也會出現慢的想砸電腦的情況,不過在磁盤如此廉價的情況下,浪費點磁盤空間換取這樣的一個機會還是值得的。
  • 沒有配置swap:內核的OOM killer被觸發,可能連保存工作進度的機會都沒有。

服務器環境

服務器一般都會配置監控程序,當內存用量達到一個閾值的時候告警或者會自動重啟異常的進程。但如果沒有監控呢?當內存被用光的時候,分兩種情況:

  • **配置了swap:**這時服務器還能提供服務,但性能會降低好幾個檔次,直到最終處于幾乎死機狀態,并且這一過程將持續很長一段時間,對服務器來說是個災難;所以配置swap只能讓服務再茍延殘喘一會兒,然后就是長時間的服務中斷(比如原來是每秒處理1000個請求的服務器,由于頻繁使用swap,導致現在每秒只能處理50個請求,站在系統角度,進程還在運行,但是在業務角度服務已經幾乎中斷了)。
  • **沒配置swap:**這時內核的OOM killer被觸發,在默認配置下,耗內存的進程會被優先kill掉,這種進程一般就是我們的業務進程,這時守護進程就會自動重啟該業務進程(沒有守護進程?開什么玩笑),這種情況只會造成服務中斷一會會兒(取決于進程重啟的時間),不會出現上面因配置了swap而導致性能很差且服務持續中斷的情況。就算OOM killer沒有kill掉預期的進程,我們通過測試也能發現,然后將OOM killer配置成重啟系統,那也比配置了swap在那里茍延殘喘的好。

從上面可以看出,對服務器來說,似乎不配置swap更好,可以讓有問題的進程盡快重啟,縮短業務受影響的時間

并且,就算沒有配置監控程序,我們還有cgroups中的內存控制模塊,可以控制一組進程所能使用的最大內存數,當超過這個數的時候,可以觸發相應的行為,比如重啟進程等。

總的來說,對于桌面環境來說,一般內存沒有服務器端那么充裕,并且由于使用場景原因,會打開很多不同類型的GUI窗口,但前臺的進程只有一個,大部分都是在后臺待命,所以配置swap對提升性能還是有必要的;對于服務器來說,配置的內存都比較充裕,啟動起來的進程也都是要干活的進程(不然就不應該被啟動起來),并且也沒有休眠的需求,再加上有了cgroups之后,可以更輕松的限制進程的內存使用,個人認為配置swap基本沒什么必要了,看看coreos,默認就沒有swap。

swap大小配置多少比較合適?

既然配置swap對桌面系統有幫助,那么配置多少大小的swap比較合適呢?下面是ubuntu給出的建議:

  • 當物理內存小于1G且不需要休眠時,設置和內存同樣大小的swap空間即可;當需要休眠時,建議配置兩倍物理內存的大小,但最大值不要超過兩倍內存大小
  • 當物理內存大于1G且不需要休眠時,建議大小為round(sqrt(RAM)),其中RAM為物理內存大小;當需要休眠時,建議大小是RAM+round(sqrt(RAM)),但最大值不要超過兩倍內存大小
  • 如果兩倍物理內存大小的swap空間還不夠用,建議增加內存而不是增加swap

下面是詳細的不同物理內存情況下的建議,第一列是物理內存的大小,第二列和第三列是不需要和需要休眠兩種情況下推薦的大小,第四列是不要超過的最大值

 物理內存(MB)  不需要休眠  需要休眠  最大值 256          256       512     512 512          512       1024    1024 1024         1024      2048    2048 物理內存(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

怎么配置swap?

當我們確定好配置多大的swap空間后,具體應該怎么配置呢?當然可以在系統安裝的時候分配好,但如果對安裝時分配的大小不滿意,我們還可以在后面進行調整。在這里將不介紹安裝的時候怎么配,只介紹如何往系統中添加更多的swap空間。

Linux下有兩種類型的swap空間,swap分區和swap文件,他們有各自的特點:

  • swap分區上面由于沒有文件系統,所以相當于內核直接訪問連續的磁盤空間,效率相對要高點,但由于swap分區一般安裝系統時就分配好了了,后期要縮減空間和擴容都很不方便。
  • swap文件放在指定分區的文件系統里面,所以有可能受文件系統性能的影響,但據說2.6版本以后的內核可以直接訪問swap文件對應的物理磁盤地址,相當于跳過了文件系統直接訪問磁盤,不過如果swap文件在磁盤上的物理位置不連續時,還是會對性能產生不利影響,但其優點就是靈活,隨時可以增加和移除swap文件。

查看系統中已經配置的swap

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即可查看系統中在用的swap

dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1               partition   524284  0       -1

如果配置有多個swap分區或者文件的話,這里將會有多行,每行代表一個正在被系統使用的swap分區或文件,下面是每個字段的意思:

  • Filename:如果swap類型是分區,這里將是分區的路徑,如果swap類型是文件,這里將是文件的路徑
  • Type:swap的類型,partition代表這是一個swap分區,file代表這是一個swap文件
  • Size:swap的大小,單位是k,這里524284表示的差不多是512M
  • Used:已經被使用的大小,這里0表示還沒有被使用到
  • Priority:優先級,優先級高的swap將會被優先使用,同等優先級的swap將會被均勻的使用(round-robin算法),優先級可以通過“swapon -p”命令來設置

查看系統中swap in/out的情況

并不是swap空間占用多就一定性能下降,真正影響性能是swap in和out的頻率,頻率越高,對系統的性能影響越大,我們可以通過vmstat命令來查看swap in/out的頻率

#參數2表示每兩秒統計一次,si和so兩列就是每秒swap in和out的次數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分區

在添加swap分區前,首先得有一個空閑的分區,如果是一塊新的磁盤,可以用fdisk來創建一個新的分區用于swap。

注意:磁盤分區操作一定要小心,弄不好就會造成數據丟失、系統掛掉的后果。磁盤分區操作不是本篇要介紹的內容,所以這里不會討論fdisk怎么用。

#本篇使用的測試環境是虛擬機,/dev/sdb是一塊新加的硬盤并且已經用fdisk創建好了一個分區#本例中將使用/dev/sdb1這個分區dev@dev:~$ sudo fdisk -l /dev/sdbDevice     Boot Start     End Sectors Size Id Type/dev/sdb1        2048 4194303 4192256   2G 83 Linux #創建swap分區dev@dev:~$ sudo mkswap /dev/sdb1Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40 #查看系統中現在正在使用的swap,以便于和添加后做比較dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1                               partition   524284  0   -1 #將新的分區加入到系統中dev@dev:~$ sudo swapon /dev/sdb1 #這時候可以看到新的swap分區已經被加入到系統中了,并且優先級比原來的要低dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1               partition   524284  0       -1/dev/sdb1               partition   2096124 0       -2 #為了保證系統重啟后會自動加載我們新的swap分區,需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/dev/sdb1 none  swap    sw   0    0" >> /etc/fstab'#查看一下,確保寫入成功,這里的第一條是原來的系統的swap分區,第二條是我們剛添加的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文件

添加swap文件就簡單多了,也沒有分區操作那么有風險。

#先創建一個新的512M的文件,用來作為swap文件,文件路徑可以隨便#fallocate這個命令依賴于文件系統,有些老的文件系統不支持這個命令,比如ext2,#這種情況下可以用dd來實現同樣的效果:#sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288#fallocate和dd的區別在于:#fallocate是先聲明這么多,然后在具體用到的時候文件系統才分配真正的物理磁盤空間,就是用一點分配一點,#而dd是一開始就實實在在的寫了512m的數據到物理磁盤空間。#所以作為測試來說fallocate方便些,因為剛開始不用寫任何數據,要快dev@dev:~$ sudo fallocate -l 512m /mnt/512MiB.swap #修改文件的權限,避免其他用戶對這個文件進行誤操作dev@dev:~$ sudo chmod 600 /mnt/512MiB.swap #格式化為swap文件dev@dev:~$ sudo mkswap /mnt/512MiB.swap #將新的文件加入到系統中dev@dev:~$ sudo swapon /mnt/512MiB.swap #這時候可以看到新的swap文件已經被加入到系統中了,類型為file#這里可以看到由于優先級最高,第一個swap分區/dev/dm-1已經被使用了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命令的輸出可以看到,經過前面兩輪添加swap分區和文件,#現在系統的交換空間已經變成3G(3144692K)了dev@dev:~$ free              total        used        free      shared  buff/cache   availableMem:         500192       39112        9564        1996      451516      430820Swap:       3144692          24     3144668 #同樣為了保證系統重啟后會自動加載我們新的swap文件,需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none  swap    sw   0    0" >> /etc/fstab'

注意:不是所有的文件系統都支持創建swap文件,如btrfs,在btrfs分區里創建swap文件將失敗。

取消所有的swap

如果經過深思熟慮之后,確定不再需要swap,那么可以將所有的swap分區和文件從系統中移除,步驟和上面的剛好相反

#停掉所有系統正在使用的swapdev@dev:~$ sudo swapoff -a #swapon -s命令沒有任何輸出,free命令顯示swap空間為0,說明swapoff成功dev@dev:~$ swapon -sdev@dev:~$ free              total        used        free      shared  buff/cache   availableMem:         500192       35924      348888        2004      115380      433924Swap:             0           0           0 #當然我們還需要修改/etc/fstab,否則下次重啟后,系統又會重新掛載相應的swap分區和文件#使用自己喜歡的編輯器,將/etc/fstab中跟swap相關的三行刪掉即可(本例中是三行,請根據實際情況調整)

如何優化swap性能?

怎么配置swap可以讓它的性能更好呢?

  • 盡量使用swap分區,相對于swap文件來說,分區肯定是連續的物理磁盤空間,而swap文件有可能不是
  • 將swap分區和系統所在的分區放在不同的磁盤上,這樣就不會和系統盤搶同一個磁盤的I/O帶寬
  • 如果有多塊磁盤的話,可以在每個盤上創建一個swap分區,并且將它們的優先級設置的一樣,這樣內核就會平均的訪問這些swap分區,性能相當于原來的N倍(這里N是磁盤的數量)

不過話又說回來了,如果頻繁的訪問swap的話,怎么優化swap都沒用,跟內存比還是低幾個數量級,性能還是下降的厲害,如果不頻繁訪問swap的話,優化swap又有啥意義呢?所以其實優化swap性能的實際意義不大,這里了解一下就好。

配置swappiness

有時我們桌面環境確實配置了比較充裕的內存,并且也配置了swap空間,這個時候就希望盡量減少swap空間的使用,避免對系統性能造成影響,Linux早就幫我們考慮到這種情況了,在2.6內核中,增加了一個叫做swappiness的參數,用于配置需要將內存中不常用的數據移到swap中去的緊迫程度。這個參數的取值范圍是0~100,0告訴內核盡可能的不要將內存數據移到swap中,也即只有在迫不得已的情況下才這么做,而100告訴內核只要有可能,盡量的將內存中不常訪問的數據移到swap中。

Ubuntu的desktop和server的默認配置都是60(可能會隨著版本變化),對于桌面環境來說,界面的響應速度直接關系到系統的流暢程度,如果內存比較充裕的話,可以將這個值設置的小一點,這樣就盡可能的把數據留在內存中,從而喚醒后臺界面程序會更快一些,Ubuntu desktop建議將該值設置為10,當然大家可以根據swap空間的實際使用情況,任意調整這個參數,直到自己滿意的水平為止。對于服務器來說,主要性能衡量標準是整體的處理能力,而不是具體某一次的響應速度,能把更多的內存用來做I/O cache可能效果更好,所以Ubuntu server建議保持60的默認值。

  • 查看當前系統中swappiness的值
dev@dev:~$ cat /proc/sys/vm/swappiness60
  • 修改當前系統中swappiness的值
dev@dev:~$ sudo sysctl vm.swappiness=10vm.swappiness = 10dev@dev:~$ cat /proc/sys/vm/swappiness10

上面通過sysctl修改的swappiness值在系統重啟后會失效,要想重啟后繼續生效,需要修改配置文件/etc/sysctl.conf,將下面這行修改成10,如果文件中找不到這行的話,在文件末位加上這行就可以了

vm.swappiness=10

什么是Linux系統

Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。

關于Linux swap分區的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太谷县| 哈尔滨市| 铜梁县| 天镇县| 犍为县| 东安县| 静海县| 安西县| 齐河县| 华亭县| 七台河市| 安徽省| 南木林县| 分宜县| 全州县| 葵青区| 望都县| 平阴县| 平顶山市| 南木林县| 永和县| 长白| 都匀市| 潼南县| 米脂县| 六盘水市| 古蔺县| 衡南县| 明光市| 象山县| 隆化县| 彭州市| 江阴市| 阿克苏市| 仁寿县| 安丘市| 胶州市| 高陵县| 江山市| 泾阳县| 遵化市|