[Linux] スワップ領域の追加、割り当て方法

[Linux] スワップ領域の追加、割り当て方法

Linux のスワップ領域

Linux でメモリ不足が原因でプロセスが正しく動かない場合、OOM Killer でプロセスが殺されてしまいます。

VPSやクラウド環境での仮想サーバーでは簡単に物理メモリを増やすことができません。そんな時はスワップ領域の割り当てを増やすとよいです。

スワップ領域 とは、メモリ使用量が実メモリの量を超えると、使われていない部分が一時的に書き出される場所がスワップです。HDD上の仮想的なメモリなので、これを増やすと見かけ上のメモリが増えるため、できることが増えます。

現在のメモリ状況の確認

free コマンドでメモリの利用状況を確認できます。-t で物理メモリとスワップメモリの合計も併せて表示します。また-hで読みやすい形で表示します。

# free -t -h
             total       used       free     shared    buffers     cached
Mem:          1.0G       301M       722M        54M         0B       3.5M
-/+ buffers/cache:       298M       725M
Swap:         1.0G       185M       838M
Total:        2.0G       487M       1.5G

この場合、実メモリのサイズが1.0GB、スワップ領域が同じく1.0GBで合計2.0GBとなっています。

スワップファイルの作成

Linuxシステムでスワップを追加するには、その前にスワップ領域を作成しなければなりません。以下その手順です。

  1. dd コマンドと /dev/zero を使って内容がゼロのファイルを作る。
  2. 作成したスワップ領域は mkswap filename/device でフォーマットする。
  3. swapon および swapoff コマンドでON/OFFを制御する。

コマンドのサンプルです。swap という名前でスワップファイルを1024MB(=1GB)のサイズで作成し、それをフォーマットしてから適応しています。

# dd if=/dev/zero of=/var/swap bs=1M count=1024
# mkswap /var/swap
# swapon /var/swap

実行したらスワップ領域が作成されます。再起動等必要ありません。free -t -h でスワップメモリが増えていることを確認しましょう。

スワップファイル作成時のエラー

スワップファイルのパーミッション

swapon: /var/swap: insecure permissions 0644, 0600 suggested.

作成したスワップファイルのパーミッションが原因です。パーミッションを書き換えればOKです。

# chmod 600 /var/swap

Operation not permitted と怒られる

swapon: /var/swap: swapon failed: Operation not permitted

VPS等の仮想マシンではスワップファイルの作成が制限されている場合もあるようです。その場合上記のようなエラーが発生します。

VPSでこのエラーが出て増やせませんでした。

以上。

Linuxカテゴリの最新記事