スワップファイル(swap)を作成して有効にする

クラウド環境やVPS環境ではスワップパーティションが設定されてないことがあります。
メモリが充分に搭載されたホストならよいかもしれませんが、メモリが少ないホストでは、メモリ不足でコマンド自体が正常に動作しなかったり、OOM killerによってサービスが強制終了されたりすることがあるので、スワップ領域を設定しておくとよいでしょう。
スワップ用に利用できるパーティションがないこともあるので、本記事ではスワップファイルを作成してスワップ領域として有効にする方法について説明します。

スワップファイルを作成する

ここでは、/swapfileというパスに2GB(2,048MB)のスワップファイルを作成することにします。

ddコマンドで2GBのファイルを生成し、パーミッションを設定し、mkswapコマンドでファイルにスワップ領域を作成します。(MiB=M)

# dd if=/dev/zero of=/swapfile bs=1M count=$((2*1024))
# chmod 600 /swapfile
# mkswap /swapfile

To set up a swap file, it is necessary to create that file before initializing it with mkswap, e.g. using a command like

# dd if=/dev/zero of=swapfile bs=1MiB count=$((8*1024))

to create 8GiB swapfile.

MKSWAP(8) – NOTES

スワップファイルを有効にする

作成したスワップファイルを有効にしてswapon -sfreeコマンドで確認します。

# swapon /swapfile
# swapon -s
Filename Type Size Used Priority
/swapswapfile file 2097144 0 -1
# free
total used free shared buffers cached
Mem: 1020400 292632 727768 0 79468 129184
-/+ buffers/cache: 83980 936420
Swap: 2097144 0 2097144

ホスト起動時にスワップファイルを有効にする

ホストを再起動した時にもスワップファイルが有効になるように、/etc/fstabへ記述しておきます。
念のために、実際にホストの再起動を行って、スワップが有効になるか確認しておくことを推奨します。

# vi /etc/fstab
/swapfile none swap defaults 0 0

For swap partitions, this field should be specified as none'.

FSTAB(5) The second field (fs_file)

スワップファイルのバーミッションについての警告

パーミッションが適切に設定されていない場合は、swaponの実行時に、次の様な警告が出ることがあります。

swapon: /swapfile: insecure permissions 0644, 0600 suggested.

念のため一旦swapoffでスワップを無効化してから、スワップファイルを推奨のパーミッションである0600に変更し、改めてswaponを実行するとよいでしょう。

# swapoff /swapfile
# chmod 0600 /swapfile
# swapon /swapfile