t2.micro にスワップ領域を追加するための設定例
[履歴] [最終更新] (2015/05/10 13:03:45)
最近の投稿
注目の記事

概要

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 のみを使用します。

  • 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  ←今回追加する設定

Amazon EBS を EC2 インスタンスから使用するための設定で紹介しましたように通常のファイルシステムの設定については

$ sudo mount -a

によって設定の検証ができました。しかしながら今回はスワップファイルの設定ですので mount ではなく以下のように検証します。

$ sudo swapon -a

これは /etc/fstab に記載のあるスワップファイルを認識させようとします。

関連ページ