【Linux】スワップ領域 (Swap) について

■ 用語整理

スワップ領域

 * 実メモリが枯渇した場合、一時的にハードディスクに退避するための領域
  => ただし、実メモリと比較すると、格段に遅い

スワップアウト(swap-out)

 * メモリからハードディスクに退避する動作

スワップイン(swap-in)

 * メモリからハードディスクに書き戻す動作

スワップ領域の作成

設定環境

 * OS : CentOS7

設定手順

0) 現状確認
0-1) コマンド「swapon -s」「free -m」で、Swapが設定されているか確認する
~~~~~~~
swapon -s
# ★ 特に何も表示されていなければ、Swap領域は設定されていない

free -m
              total        used        free      shared  buff/cache   available
Mem:           1823        1553          77           3         192          69
Swap:             0           0           0 <= ★ total が「0」なら、Swap領域は設定されていない
~~~~~~~

0-2) コマンド「df -h」で、使用可能なハードディスク領域を確認する
~~~~~~~
df -h

ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    18G   11G  7.4G   58% /       <= ★ 残り領域「7.4G」を確認
devtmpfs                  897M     0  897M    0% /dev
tmpfs                     912M  2.1M  910M    1% /dev/shm
tmpfs                     912M  9.0M  903M    1% /run
・・・略・・・
~~~~~~~
1) Swap領域作成
1-1) コマンド「dd」で、ファイルを作成する
~~~~~~~
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=2048
~~~~~~~

1-2) コマンド「ls -lh」で、確認
~~~~~~~
ls -lh /swapfile
-rw-r--r--. 1 root root 2.0G  1月 10 22:59 /swapfile
~~~~~~~

1-3) コマンド「chmod」でアクセス権を設定
~~~~~~~
sudo chmod 600 /swapfile

# 確認
ls -lh /swapfile
-rw-------. 1 root root 2.0G  1月 10 22:59 /swapfile
~~~~~~~

1-4) コマンド「mkswap」でSwap領域を作成する
~~~~~~~
sudo mkswap /swapfile
スワップ空間バージョン1を設定します、サイズ = 2097148 KiB
ラベルはありません, UUID=8150d9f0-af2c-4s67-a34s-de42ed23a32e
~~~~~~~

1-5) コマンド「swapon」でSwap領域を有効化する
~~~~~~~
sudo swapon /swapfile
~~~~~~~

1-6) コマンド「swapon -s」「free -m」でSwap領域を確認する
~~~~~~~
swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        2097148	0	-1

free -m
              total        used        free      shared  buff/cache   available
Mem:           1823        1291          70           3         461         322
Swap:          2045           0        2045
~~~~~~~
2) Swap領域の永続化
2-1) 「/etc/fstab」を修正し、Swap領域の永続化する
~~~~~~~
sudo vi /etc/fstab
で、最終行に以下を記入
/swapfile   swap    swap    sw  0   0
~~~~~~~
【任意設定】3) swappiness(メモリスワップの度合いを調整)
3-1) swappinessを確認するためにコマンド「cat /proc/sys/vm/swappiness」を実行する
~~~~~~~
cat /proc/sys/vm/swappiness
30
~~~~~~~

3-2) コマンド「sysctl vm.swappiness=【設定値(0から100)】」でswappinessを変更する
~~~~~~~
sudo sysctl vm.swappiness=10

cat /proc/sys/vm/swappiness
10
~~~~~~~

3-3) カーネルパラメータを設定する為の設定ファイル「/etc/sysctl.conf」を修正
~~~~~~~
sudo vi /etc/sysctl.conf
で、最終行に以下を記入
vm.swappiness = 10
~~~~~~~
【任意設定】4) vfs_cache_pressure(説明は以下のサイト参照)
https://qiita.com/komeda-shinji/items/c76a5f75b959e4152f91
4-1) vfs_cache_pressureを確認するためにコマンド「cat /proc/sys/vm/vfs_cache_pressure」を実行する
~~~~~~~
cat /proc/sys/vm/vfs_cache_pressure
100
~~~~~~~

4-2) コマンド「sysctl vm.vfs_cache_pressure=【設定値(0~)】」でvfs_cache_pressureを変更する
~~~~~~~
sudo sysctl vm.vfs_cache_pressure=50

cat /proc/sys/vm/vfs_cache_pressure
50
~~~~~~~

4-3) カーネルパラメータを設定する為の設定ファイル「/etc/sysctl.conf」を修正
~~~~~~~
sudo vi /etc/sysctl.conf
で、最終行に以下を記入
vm.vfs_cache_pressure = 50
~~~~~~~

スワップ領域の削除

簡単!!
1) コマンド「swapoff」でSwap領域を無効化する
~~~~~~~
sudo swapoff /swapfile
~~~~~~~

2) コマンド「rm」でSwap領域を削除する
~~~~~~~
sudo rm /swapfile
~~~~~~~