1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Linux交換分區(qū)要點匯總

        共 15368字,需瀏覽 31分鐘

         ·

        2021-08-05 16:30

        關注「開源Linux」,選擇“設為星標”
        回復「學習」,有我為您特別篩選的學習資料~

        目錄

        前言

        Linux 將物理內(nèi)存分為內(nèi)存段,叫做頁面。交換是指內(nèi)存頁面被復制到預先設定好的硬盤空間(叫做交換空間)的過程,目的是釋放這份內(nèi)存頁面。物理內(nèi)存和交換空間的總大小是可用的虛擬內(nèi)存的總量。

        一、什么是 Swap

        理解 Swap 在 Linux 操作系統(tǒng)上面的作用!

        我們知道 swap space 是磁盤上的一塊區(qū)域,可以是一個分區(qū),也可以是一個文件,或者以它們的組合方式出現(xiàn)。簡單點說,當系統(tǒng)物理內(nèi)存吃緊時,Linux 系統(tǒng)會將內(nèi)存中不常訪問的數(shù)據(jù)保存到 swap 上,這樣系統(tǒng)就有更多的物理內(nèi)存為其他進程服務,而當系統(tǒng)需要訪問 swap 上存儲的內(nèi)容時,系統(tǒng)會再將 swap 上的數(shù)據(jù)加載到內(nèi)存中,這就是我們常說的 swap outswap in 了。

        二、Swap 的優(yōu)缺點

        我們應當在適合的時候,靈活的使用 Swap 分區(qū)!

        [1] 主要優(yōu)點如下所示

        對于一些大型的應用程序(如LibreOffice等),在啟動的過程中會使用大量的內(nèi)存,但這些內(nèi)存很多時候只是在啟動的時候用一下,后面的運行過程中很少再用到這些內(nèi)存。有了 swap 之后,系統(tǒng)就可以將這部分不這么使用的內(nèi)存數(shù)據(jù)保存到 swap 上去,從而釋放出更多的物理內(nèi)存供系統(tǒng)使用。

        很多發(fā)行版(如ubuntu)的休眠功能依賴于 swap 分區(qū),當系統(tǒng)休眠的時候,會將內(nèi)存中的數(shù)據(jù)保存到 swap 分區(qū)上,等下次系統(tǒng)啟動的時候,再將數(shù)據(jù)加載到內(nèi)存中,這樣可以加快系統(tǒng)的啟動速度,所以如果要使用休眠的功能,必須要配置 swap 分區(qū),并且大小一定要大于等于物理內(nèi)存在某些情況下,物理內(nèi)存有限,但又想運行耗內(nèi)存的程序怎么辦?這時可以通過配置足夠的 swap 空間來達到目標,雖然慢一點,但至少可以運行。

        [2] 主要缺點如下所示

        swap 是存放在磁盤上的,磁盤的速度和內(nèi)存比較起來慢了好幾個數(shù)量級,如果不停的讀寫 swap,那么對系統(tǒng)的性能肯定有影響,尤其是當系統(tǒng)內(nèi)存很吃緊的時候,讀寫 swap 空間發(fā)生的頻率會很高,導致系統(tǒng)運行很慢,像死了一樣,這個時候添加物理內(nèi)存是唯一的解決辦法。

        三、Swap 的大小配置

        介紹了日常使用時,配置多大的 Swap 比較合適!

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

        • 當物理內(nèi)存小于 1G 且不需要休眠時,設置和內(nèi)存同樣大小的 swap 空間即可;當需要休眠時,建議配置兩倍物理內(nèi)存的大小,但最大值不要超過兩倍內(nèi)存大小。

        • 當物理內(nèi)存大于 1G 且不需要休眠時,建議大小為 sqrt(RAM),其中 RAM 為物理內(nèi)存大??;當需要休眠時,建議大小是 RAM+round(sqrt(RAM)),但最大值不要超過兩倍內(nèi)存大小。

        • 如果兩倍物理內(nèi)存大小的 swap 空間還不夠用,建議增加內(nèi)存而不是增加swap

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

         物理內(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

        四、Swap 常用操作

        介紹了日常使用時,增刪的相關操作!

        當我們確定好配置多大的 swap 空間后,具體應該怎么配置呢?Linux 下有兩種類型的 swap 空間,swap 分區(qū)和 swap 文件,它們有各自的特點:

        swap 分區(qū):

        • swap 分區(qū)上面由于沒有文件系統(tǒng),所以相當于內(nèi)核直接訪問連續(xù)的磁盤空間,效率相對要高點,但由于 swap 分區(qū)一般安裝系統(tǒng)時就分配好了,后期要縮減空間和擴容都很不方便。

        swap 文件:

        • swap 文件放在指定分區(qū)的文件系統(tǒng)里面,所以有可能受文件系統(tǒng)性能的影響,但據(jù)說2.6版本以后的內(nèi)核可以直接訪問swap文件對應的物理磁盤地址,相當于跳過了文件系統(tǒng)直接訪問磁盤。不過如果 swap 文件在磁盤上的物理位置不連續(xù)時,還是會對性能產(chǎn)生不利影響,但其優(yōu)點就是靈活,隨時可以增加和移除swap文件。

        交換分區(qū)在物理內(nèi)存被填滿時用來保持內(nèi)存中的內(nèi)容。當 RAM 被耗盡,Linux 會將內(nèi)存中不活動的頁移動到交換空間中,從而空出內(nèi)存給系統(tǒng)使用。雖然如此,但交換空間不應被認為是物理內(nèi)存的替代品。大多數(shù)情況下,建議交換內(nèi)存的大小為物理內(nèi)存的 1 到 2 倍。也就是說如果你有 8GB 內(nèi)存, 那么交換空間大小應該介于 8-16GB。

        [1] 查看系統(tǒng)中已經(jīng)配置的 swap 分配情況
        # Filename: 類型是分區(qū)則顯示分區(qū)路徑,類型是文件則顯示文件路徑
        # Type: partition代表是一個swap分區(qū),file代表是一個swap文件
        # Size: 顯示swap的大小,默認單位是KB
        # Used: 已經(jīng)被使用的大小,0表示還沒有被使用到
        # Priority: 優(yōu)先級高將會被優(yōu)先使用,同等優(yōu)先級將會均勻使用(設置: swapon -p)
        escape@app:~$ swapon -s
        Filename             Type      Size        Used       Priority
        /data/.swapfile      file      10485756    6534248    -1
        /data1/.swapfile     file      10485756    3246088    -2
        # 指定交換區(qū)的優(yōu)先順序
        $ sudo swapon -p xxx

        # 啟動某個交換swap
        $ sudo swapon /dev/sda2

        # 啟動所有系統(tǒng)配置的swap
        $ sudo swapon -a

        # 關閉某個交換swap
        $ sudo swapoff /dev/sda2

        # 關閉所有系統(tǒng)配置的swap
        $ sduo swapoff -a
        [2] 固定使永久生效
        # 寫入磁盤配置文件
        # <file system> <mount point>   <type>  <options>       <dump>  <pass>
        $ cat /etc/fstab
        /data1/.swapfile        none    swap    sw      0       0
        /data1/.swapfile2       none    swap    sw      0       0
        [3] 查看系統(tǒng)中 swap in/out 的情況
        # 并不是swap空間占用多就一定性能下降
        # 真正影響性能是swap in和out的頻率,頻率越高對系統(tǒng)的性能影響越大
        escape@app:~$ vmstat 2
        procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
         r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
         3  1 9795592 2037192 282460 14034552    8    8    51    46    0    0 10  1 88  0  0
         3  0 9795592 2025832 282472 14044688    0    0 68279   270 5416 6425 35  6 54  5  0
        [4] 查看系統(tǒng)內(nèi)存使用情況
        # 查看系統(tǒng)內(nèi)存的實際使用參數(shù)
        $ free
                 總計物理內(nèi)存       已使用       可使用      共享內(nèi)存   磁盤緩存的大小
                      total        used        free      shared    buff/cache    available
        Mem:       32887700    15661764    13404800      585080       3821136     15865296

        交換分區(qū)
        Swap:      31457272    10461216    20996056

        五、配置 Swap 緩存

        操作系統(tǒng)使用 ZFS 文件系統(tǒng)

        [1] 添加 swap 分區(qū)
        # 1.創(chuàng)建邏輯卷
        $ sudo zpool create -V 2G rpool/swap

        # 2.使用mkswap命令來格式化交換分區(qū)
        $ sudo mkswap -f rpool/swap

        # 3.激活新建的交換分區(qū)
        swapon -a /dev/zvol/dsk/rpool/swap2

        # 4.永久生效
        $ sudo vi /etc/fstab
        /dev/zvol/dsk/rpool/swap2 swap  swap  default  0  0
        [2] 取消 swap 配置
        # 1.關閉某個交換swap
        $ sudo swapoff /dev/zvol/dsk/rpool/swap2

        # 2.刪除邏輯卷
        $ sudo zpool destroy rpool/swap

        # 3.修改/etc/fstab
        將添加的Swap記錄一并刪除,否則下次重啟后,系統(tǒng)又會重新掛載相應的swap分區(qū)和文件

        操作系統(tǒng)使用其他文件系統(tǒng)

        [1] 添加 swap 分區(qū)
        # 1.新加的硬盤
        $ sudo fdisk -l /dev/sdb
        Device     Boot Start     End Sectors Size Id Type
        /dev/sdb1        2048 4194303 4192256   2G 83 Linux

        # 2.使用mkswap命令來格式化交換分區(qū)
        $ sudo mkswap /dev/sdb1
        Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)
        no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40

        # 3.激活新建的交換分區(qū)
        $ sudo swapon /dev/sdb1

        # 4.swap分區(qū)已經(jīng)被加入到系統(tǒng)中
        $ swapon -s
        Filename                Type        Size    Used    Priority
        /dev/sdb1               partition   2096124 0       -1

        # 5.永久生效
        $ sudo vi /etc/fstab
        /dev/sda3 swap  swap  default  0  0
        [2] 添加 swap 文件
        # 1.創(chuàng)建swap文件
        $ sudo fallocate -l 512m /data/512M.swap
        $ sudo fallocate -l 20G /data/20G.swap

        # 2.修改文件的權限,避免其他用戶對這個文件進行誤操作
        $ sudo chmod 600 /data/512M.swap
        $ sudo chmod 600 /data/20G.swap

        # 3.格式化為swap文件
        $ sudo mkswap /data/512M.swap
        $ sudo mkswap /data/20G.swap

        # 4.啟用交換空間
        $ sudo swapon /data/512M.swap
        $ sudo swapon /data/20G.swap

        # 5.查看swap狀態(tài)
        $ swapon -s
        Filename                Type        Size    Used    Priority
        /data/512M.swap        file        524284  0       -1
        /data/20G.swap        file        20971360  0       -2

        # 6.永久生效
        $ sudo vi /etc/fstab
        /dev/sda3 swap  swap  default  0  0
        [3] 取消 swap 配置
        # 1.停掉所有系統(tǒng)正在使用的swap
        $ sudo swapoff /data/20G.swap

        # 2.查看swap狀態(tài)
        $ swapon -s
        Filename                Type        Size    Used    Priority
        /data/512M.swap        file        524284  0       -1

        # 3.修改/etc/fstab
        將添加的Swap記錄一并刪除,否則下次重啟后,系統(tǒng)又會重新掛載相應的swap分區(qū)和文件

        六、優(yōu)化 swap 性能

        使用和配置 Swap 的相關經(jīng)驗總結(jié)!

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

        • 盡量使用 swap 分區(qū),相對于 swap 文件來說,分區(qū)肯定是連續(xù)的物理磁盤空間,而 swap 文件有可能不是。

        • 將 swap 分區(qū)和系統(tǒng)所在的分區(qū)放在不同的磁盤上,這樣就不會和系統(tǒng)盤搶同一個磁盤的 I/O 帶寬。

        • 如果有多塊磁盤的話,可以在每個盤上創(chuàng)建一個 swap 分區(qū),并且將它們的優(yōu)先級設置的一樣,這樣內(nèi)核就會平均的訪問這些 swap 分區(qū),性能相當于原來的 N 倍(這里 N 是磁盤的數(shù)量)。

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

        七、配置 swappiness 特性

        配置希望盡量減少 Swap 空間的使用!

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

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

        # 修改當前系統(tǒng)中swappiness的值
        $ sudo sysctl vm.swappiness=10
        vm.swappiness = 10

        # 查看當前系統(tǒng)中swappiness的值
        $ sudo cat /proc/sys/vm/swappiness
        10

        # 生效配置 => /etc/sysctl.conf
        $ sudo /sbin/sysctl -p
        # 修改當前系統(tǒng)中vfs_cache_pressure的值
        $ sudo sysctl vm.vfs_cache_pressure=50
        vm.vfs_cache_pressure=50

        # 查看當前系統(tǒng)中vfs_cache_pressure的值
        $ sudo cat /proc/sys/vm/vfs_cache_pressure
        50

        # 生效配置 => /etc/sysctl.conf
        $ sudo /sbin/sysctl -p

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

        vm.swappiness=10

        作者: Escape 

        鏈接: https://escapelife.github.io/posts/df59491b.html


        往期推薦



        如何優(yōu)雅的在 Linux 下開機自動重啟腳本

        今年云計算的主要趨勢,混合云/邊緣計算/Serverless

        18個工具分析Linux占用網(wǎng)絡帶寬大的進程

        Linux內(nèi)存、Swap、Cache、Buffer詳細解析

        超全面的 Kubernetes 容器網(wǎng)絡技能,運維看后都說好

        計算機網(wǎng)絡的 89 個核心概念

        致運維:關于 Kubernetes 的架構,看完這篇你就明白了

        Nginx如何限流?

        我們?yōu)槭裁床挥肒ubernetes?

        50 個應知必會的 Linux 常識和操作!

        關注「開源Linux」加星標,提升IT技能


        點個在看少個 bug ??

        瀏覽 58
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操逼在线观看 | 亚洲精品一级片 | 日本一区二区三区四区五区六区 | 色情网一区二区三区四区无码视频 | 成人影片亚洲 | 日本亚洲欧美 | a亚洲a| 麻豆精品秘 国产视频 | 一级片视频网站 | 欧美老女人操逼视频 |