t2.micro に限らず AWS EC2 のインスタンスにはスワップ領域が確保されていません。コスト削減のために必要最小限の性能を備えたインスタンスタイプを選択してしまうと、メモリが不足して OOM Killer によってプロセスが kill されてしまう可能性が高い状態が継続して危険です。そこで、非常事態にはスワップできるように設定を行います。今回 t2.micro を利用していますが基本的な考え方は他のインスタンスタイプでも同じです。
スワップ領域の準備
スワップ領域には /dev 以下のデバイスをパーティションとして利用する「スワップパーティション」と、ファイルシステム内のファイルを利用する「スワップファイル」の二種類があります。今回の例ではパーティションでは EBS を /data にマウントします。EBS には Amazon EBS General Purpose (SSD) volumes を選択します。
補足
- t2.micro ではインスタンスストア (Ephemeral Disk) が利用できないため EBS を利用しています。
一部のインスタンスファミリー(T1、T2 など)は、インスタンスストアボリュームをまったくサポートせず、ストレージとしては Amazon EBS のみを使用します。
- Root ボリュームに十分な空きがある場合は EBS をマウントせずに OS と同じファイルシステムをスワップファイルの格納領域として利用できます。
- 数年前は I/O あたり追加課金がなされる Amazon EBS Magnetic volumes しかなかったためクラウド破産の危険性がありました。現在は Amazon EBS の価格 にあるように Amazon EBS General Purpose (SSD) volumes が選択できます。
- Root ボリュームや Amazon EBS General Purpose (SSD) volumes がサポートする IOPS は小さいためスワップ領域を利用すると低速になります。あくまでも非常事態用と考えます。
- Amazon EBS Provisioned IOPS (SSD) volumes がサポートする IOPS は大きく設定できますが 1 GB あたりのコストは高くなります。
スワップファイルの作成
ここまでの設定で EBS が /data にマウントされているとします。以下のコマンドでスワップファイルを作成します。
必要に応じてスワップファイルを格納するディレクトリを作成します。
$ sudo mkdir /data/tmp
$ sudo chmod 777 /data/tmp
スワップファイルを作成します。t2.micro は実メモリが 1 GB ですので 2 GB としました。
$ sudo dd if=/dev/zero of=/data/tmp/swap.img bs=1M count=2048
- if=/dev/zero → input file から 0 を読み出します
- of=/data/tmp/swap.img → 出力ファイル (output file)
- bs=1M → 一度に書き込むバイト数
- count=2048 → ブロック "bs=1M" をコピーする回数
作成できました。
$ du -h /data/tmp/swap.img
2.1G /data/tmp/swap.img
権限を変更します。
$ sudo chmod 600 /data/tmp/swap.img
スワップファイルとして初期化
$ sudo mkswap /data/tmp/swap.img
スワップ空間バージョン1を設定します、サイズ = 2097148 KiB
ラベルはありません, UUID=fecce2a6-ec57-49d3-9036-f77a8a0dc29b
スワップファイルを手動で認識させる
$ sudo swapon /data/tmp/swap.img
有効になりました。
$ free -m
total used free shared buffers cached
Mem: 996 782 213 0 14 132
-/+ buffers/cache: 636 360
Swap: 2047 0 2047 ←★
別の確認方法も記載します。
$ swapon -s
Filename Type Size Used Priority
/data/tmp/swap.img file 2097148 0 -1
インスタンス起動時にスワップファイルが自動で認識されるように設定 (fstab)
EBS のマウント設定を記載した /etc/fstab にスワップファイルの設定も記載できます。以下のように追記します。
/etc/fstab
#
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/xvdf /data ext4 defaults,nofail 0 2 ←EBSマウントのために追加した設定
/data/tmp/swap.img none swap defaults,nofail 0 0 ←今回追加する設定
通常のファイルシステムの設定については
$ sudo mount -a
によって設定の検証ができました。しかしながら今回はスワップファイルの設定ですので mount ではなく以下のように検証します。
$ sudo swapon -a
これは /etc/fstab に記載のあるスワップファイルを認識させようとします。
3Dモデリングとゲームエンジンに興味があります。Blenderも活用!
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。



