Linux - Swap

7697 ワード

swapの概要
swapって何?
まず、swapはハードディスク上の空間です.
次に、メモリに余分なスペースがない場合、一部のデータをswapスペースに交換することができます.つまり、メモリの一部のデータをハードディスク(HDD)に格納し、メモリ領域を解放します.これにより、解放されたメモリ領域は、他のデータを格納するために利用されるようになります.
このように,本来4 Gのメモリしかないが,swapに2 Gがあれば,使用可能なメモリは6 Gと考えられる.
しかし、ハードディスク(HDD)の速度がメモリよりも遅くなりすぎます.したがってswapはメモリの補完にすぎず,メモリ不足時のメモリの拡張であるが,メモリの代わりに使用することはできない.
swapとメモリの交換ポリシー
メモリが不足している場合、オペレーティングシステムは最も長く使用されていないメモリデータを選択し、swap空間に交換します.
なお、交換操作はオペレーティングシステムによって行われる.
いつswapを使うか
システムはどのような状況や条件でSwapパーティションの空間を使用しますか?実はLinuxはパラメータswappinessによって制御されています.もちろん複雑なアルゴリズムにも関連している.
このパラメータ値は0〜100であり、制御システムswapの使用度である.
0は、メモリデータをできるだけswapに移動しないようにカーネルに伝えます.すなわち、やむを得ない場合にのみそうします.100は、可能な限り、メモリにあまりアクセスしないデータをswapに移動するようにカーネルに伝えます.既定値は60です.注意:これはただの重み値であり、パーセンテージ値ではなく、システムカーネルの複雑なアルゴリズムに関連しています.
現在のシステムのswappinessの値を表示
cat/proc/sys/vm/swappiness
現在のシステムのswappinessの値を変更する
sudo sysctl vm.swappiness=10
上記sysctlで修正するswappiness値は、システムが再起動すると失効し、再起動してから有効になるには、プロファイル/etc/sysctlを変更する必要があります.confは、次の行を10に変更します.ファイルに行が見つからない場合は、ファイルの末尾に行を付ければいいです.
vm.swappiness=10
swap設定
swapサイズ
swapの構成がデスクトップシステムに役立つ以上、どのくらいのサイズのswapを構成するのが適切ですか?次はubuntuが提案したものです.
  • 物理メモリが1 G未満でスリープを必要としない場合、メモリと同じサイズのswap空間を設定すればよい.スリープが必要な場合は、物理メモリの2倍のサイズを設定することをお勧めしますが、最大値は2倍のメモリサイズ
  • を超えないでください.
  • 物理メモリが1 Gより大きく、スリープを必要としない場合、推奨サイズはround(sqrt(RAM))であり、RAMは物理メモリサイズである.スリープが必要な場合、推奨サイズはRAM+round(sqrt(RAM))ですが、最大値はメモリサイズの2倍を超えないでください.
  • 物理メモリサイズの2倍のswapスペースが足りない場合は、swap
  • ではなくメモリを増やすことをお勧めします.
    swapのオン/オフ
    Linuxの下には2種類のswap空間があり、swapパーティションとswapファイルにはそれぞれの特徴があります.
    swapパーティションの上にはファイルシステムがないため、カーネルが連続したディスク空間に直接アクセスすることに相当し、効率は相対的に高いが、swapパーティションは一般的にシステムをインストールする際に割り当てられているため、後期にスペースを削減したり拡張したりするのは不便である.
    swapファイルは指定されたパーティションのファイルシステムの中に入っているので、ファイルシステムの性能の影響を受ける可能性がありますが、2.6以降のカーネルはswapファイルに対応する物理ディスクアドレスに直接アクセスできると言われています.ファイルシステムをスキップしてディスクに直接アクセスすることに相当しますが、swapファイルがディスク上の物理的な位置が連続していない場合、性能に悪影響を及ぼすことになります.しかし、swapファイルをいつでも追加および削除できる柔軟性の利点があります.
    システムで構成されているswapの表示
    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1               partition   524284  0       -1
    
    # :          ,    swap
    

    複数のswapパーティションまたはファイルが構成されている場合、ここには複数の行があります.各行はシステムで使用されているswapパーティションまたはファイルを表し、以下は各フィールドの意味です.
  • Filename:swapタイプがパーティションの場合、ここではパーティションのパス、swapタイプがファイルの場合、ここではファイルのパス
  • Type:swapのタイプで、partitionはswapパーティションを表し、fileはswapファイル
  • を表します.
  • Size:swapの大きさ、単位はkであり、ここで524284が示す差は512 M
  • ではない.
  • 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 2
    procs------------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/sdb
    Device     Boot Start     End Sectors Size Id Type
    /dev/sdb1        2048 4194303 4192256   2G 83 Linux
    
    #  swap  
    dev@dev:~$ sudo mkswap /dev/sdb1
    Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)
    no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40
    
    #            swap,          
    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1                               partition   524284  0   -1
    
    #           
    dev@dev:~$ sudo swapon /dev/sdb1
    
    #         swap            ,           
    dev@dev:~$ swapon -s
    Filename                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      24K
    dev@dev:~$ swapon -s
    Filename                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   available
    Mem:         500192       39112        9564        1996      451516      430820
    Swap:       3144692          24     3144668
    
    #                    swap  ,    /etc/fstab  
    dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none  swap    sw   0    0" >> /etc/fstab'
    
    

    swapを閉じる
    #           swap
    dev@dev:~$ sudo swapoff -a
    
    #swapon -s        ,free    swap   0,  swapoff  
    dev@dev:~$ swapon -s
    dev@dev:~$ free
                  total        used        free      shared  buff/cache   available
    Mem:         500192       35924      348888        2004      115380      433924
    Swap:             0           0           0
    
    #         /etc/fstab,       ,           swap     
    #          , /etc/fstab  swap         (      ,         )
    

    どのプロセスがSwapを使用しているかを調べる方法
    次のコマンドで、すべてのプロセスのswap使用状況を表示できます.
    cat/proc/$(pid)/smaps
    プロセスswap占有メモリサイズスクリプトを表示します.
    grep "Swap" /proc/$pid/smaps | awk -F':' '{print $2}' | awk -F' ' 'BEGIN{sum=0}{if($1>0)sum+=$1} END{print sum}'
    

    すべてのプロセスでswapを使用するスクリプトを表示します.
    pids=$(cd /proc; ls | grep "^[0-9]")
    for pid in $pids;
    do
        if [[ $pid -lt 100 ]];then
            continue
        fi
        echo -n "pid=$pid====="
        grep "Swap" /proc/$pid/smaps | awk -F':' '{print $2}' | awk -F' ' 'BEGIN{sum=0}{if($1>0)sum+=$1} END{print sum}'
    done
    

    リファレンス
  • linuxカーネルを調整し、swap
  • を使用せずにメモリを使用します.
  • linuxは、swap
  • を使用したプロセスを表示します.
  • Linux交換空間(swap space)
  • Linux統計現在のすべてのプロセスがswapパーティションを使用する場合