EC2にSwap領域はありません。Swapを使うようになったら運用的にアウトですが、といってもまったくないのはちょっと・・・・・・。メモリが枯渇して、OOMkillerにサービスが殺られるなんてことをなくしたい。
OOMkiller
Linuxは、メモリが不足してシステムが停止する恐れがある際、メモリリソースを多く消費しているプロセスを強制的に殺します。これをOOM Killerといいます。重要なプロセスでも問答無用で殺しにきます。いるはずのプロセスがある日消えていたのなら、それはOOM Killerに殺されたのかもしれません。
@see Linux OOM Killerについて
そんなわけでAWS EC2にSwap領域を設定します。特にDBとして動かしている場合は必須。また、Swapを使用した時点で処理は重くなり、EBSはI/Oでの課金なのでSwapが発生している時点で上位インスタンスに変更するのが運用的にもお財布的にもベターです。
Swap作り開始
Swap用ディレクトリ作成
1 |
# mkdir /var/lib/swap |
1 |
# cd /var/lib/swap/ |
follocteでファイルを作成します。
1 |
[root@webadmin swap]# fallocate -l 4g swapfile.0 |
1秒かからず巨大ファイルが作成できます!
物理メモリ2GBなので、4GBを作成しました。
1 2 3 4 5 |
[root@webadmin swap]# mkswap swapfile.0 Setting up swapspace version 1, size = 4194300 KiB no label, UUID=b85fcjopgehogehogehogehogehogheogefoobarrrrrrr |
パーミッションを作成。
1 |
# chmod 600 swapfile.0 |
SwapファイルをSwapとしてマウントします。
1 |
# swapon swapfile.0 |
状況確認。
1 2 3 4 5 6 7 8 9 10 11 |
[root@webadmin swap]# swapon -s Filename Type Size Used Priority /var/lib/swap/swapfile.0 file 4194300 0 -1 --------------------------------------------------------------------- ※内容は以下と同じ # cat /proc/swaps Filename Type Size Used Priority /var/lib/swap/swapfile.0 file 4194300 0 -1 --------------------------------------------------------------------- |
1 |
# top |
大丈夫そうですね。
1 2 3 4 5 6 |
[root@webadmin swap]# free -m total used free shared buffers cached Mem: 2003 1347 655 52 145 201 -/+ buffers/cache: 1000 1002 Swap: 4095 0 4095 |
色々なコマンドで念の為確認。
Swapファイル自動マウント設定
このままだと再起動するとマウントしてくれないので、/etc/fstabに記述して自動マウントしてくれるように設定します。
1 2 3 4 5 6 7 8 9 10 11 |
# vi /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 ※以下追記 /var/lib/swap/swapfile.0 swap swap defaults 0 0 |
再起動を行います。
1 |
# reboot now |
再起動後にSwapを使用できるか確認して完了です。
AWS EC2に限らず、クラウドサービスは後からメモリ等を増減できても、Swap部分は自分で再設定する必要があることが多いので注意が必要です。Swapの目安は物理メモリの2倍と覚えておきましょ~。