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システムでスワップを追加するには、その前にスワップ領域を作成しなければなりません。以下その手順です。
dd
コマンドと/dev/zero
を使って内容がゼロのファイルを作る。- 作成したスワップ領域は
mkswap filename/device
でフォーマットする。 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でこのエラーが出て増やせませんでした。
以上。
コメントを書く