t2.micro に限らず AWS EC2 のインスタンスにはスワップ領域が確保されていません。コスト削減のために必要最小限の性能を備えたインスタンスタイプを選択してしまうと、メモリが不足して OOM Killer によってプロセスが kill されてしまう可能性が高い状態が継続して危険です。そこで、非常事態にはスワップできるように設定を行います。今回 t2.micro を利用していますが基本的な考え方は他のインスタンスタイプでも同じです。
スワップ領域には /dev 以下のデバイスをパーティションとして利用する「スワップパーティション」と、ファイルシステム内のファイルを利用する「スワップファイル」の二種類があります。今回の例ではパーティションではなく、手軽に実現できるため EBS をマウントしてファイルシステム内にスワップファイルを作ります。具体的には「Amazon EBS を EC2 インスタンスから使用するための設定」を参考に EBS を /data にマウントします。EBS には Amazon EBS General Purpose (SSD) volumes を選択します。
一部のインスタンスファミリー(T1、T2 など)は、インスタンスストアボリュームをまったくサポートせず、ストレージとしては Amazon EBS のみを使用します。
ここまでの設定で 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
作成できました。
$ 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
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 ←今回追加する設定
Amazon EBS を EC2 インスタンスから使用するための設定で紹介しましたように通常のファイルシステムの設定については
$ sudo mount -a
によって設定の検証ができました。しかしながら今回はスワップファイルの設定ですので mount ではなく以下のように検証します。
$ sudo swapon -a
これは /etc/fstab に記載のあるスワップファイルを認識させようとします。