【AWS】EC2にswap領域を用意する(スワップ メモリ)

はじめに

EC2インスタンス内にスワップファイルを作成してメモリ領域として割り当てます。T2、T3系はデフォルトではスワップメモリが用意されていないので、自分で用意する必要があるようです。

検索すると同様の記事はたくさんありますが、毎回ググるのが面倒なので自分用のメモとして残しておきます。AWS公式で紹介されている手順とほぼ同じです。

スワップファイルを使用して、Amazon EC2 インスタンスのスワップ領域として機能するようにメモリを割り当てるにはどうすればよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/

手順

スワップファイル作成

例えば、「swapfile」という名前で4GB用意する場合

$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32

bscountを乗算したサイズのファイルが出来上がります。

2GB用意する場合、こんな感じにも書けます。

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

bsが大き過ぎるとパフォーマンスに影響するみたいですが、公式で128Mを指定しているのでこれぐらいなら問題ないようです。パフォーマンスと言ってもファイル作成時のもの(多分)

コマンドの解説

dd ファイルコピーコマンド
if コピー元を指定(/dev/zeroは永遠に0出力するUNIX系のOSの特殊なファイル)
of コピー先を指定(swapfileという名前は任意)
bs ブロックサイズ(実際のメモリよりも小さくしないとエラーになります)
count ブロックのコピー回数

スワップ領域の割当

# パーミッションの変更
$ sudo chmod 600 /swapfile

# スワップ領域として設定
$ sudo mkswap /swapfile

# スワップ領域の有効化
$ sudo swapon /swapfile

スワップファイルのパーミッションは600でないとスワップファイルとして割り当てができません。

サーバ起動時に自動で割り当てられるように設定

テキストエディタで /etc/fstab を開いて編集します。

# vimで編集する場合
$ sudo vi /etc/fstab

### ファイル末尾に以下を追記 ###
/swapfile swap swap defaults 0 0

※ vimの使い方は特殊なのでググってください。

確認

スワップメモリが正常に割り当てられたか確認してみましょう。

$ sudo swapon -s
$ free -h

まとめ

T2micro(無料枠)などはメモリが1GBなので、重めの処理が重なるとメモリ不足で実行中の処理が止まってしまう事があります。スワップメモリがあればパフォーマンスは落ちますが、処理を続けることができるのでやっておいた方がよい作業の一つですね。