AWSのEC2で必要なswap領域の追加とスワップを減らす設定


EC2のnanoやmicro、smallといった小さいインスタンスを使っていると、デフォルトではswap領域がないため、nginxをコンパイルする際やElasticsearchを起動する際など、メモリを多く必要とする処理が失敗してしまうことがよくあります。
また、スワップが頻繁に発生すると処理速度も心配になるので、なるべくメモリを使って頑張ってもらう設定も一緒にすると安心です。

スワップ領域の追加手順

512MBのswap領域を追加する手順です。作業はrootユーザ想定なので、適宜sudoは追加してください。

dd if=/dev/zero of=/swapfile1 bs=1M count=512
chmod 600 /swapfile1
mkswap /swapfile1
swapon /swapfile1
echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab

設定追加されていることを確認。

cat /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
# /swapfile1  none        swap    sw              0   0

freeコマンドでもSwap領域と使用されている領域を確認できます。

free -m
#              total       used       free     shared    buffers     cached
# Mem:          2003       1932         70          0          0         19
# -/+ buffers/cache:       1912         90
# Swap:          511        511          0

スワップ頻度の変更手順

swappinessでスワップの頻度を変更できます。
AmazonLinuxではデフォルトで60になっていました。

cat /proc/sys/vm/swappiness
# 60

rootユーザでの作業想定の手順。

echo 10 | tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | tee -a /etc/sysctl.conf

変更を確認します。

grep swappiness /etc/sysctl.conf
# vm.swappiness = 10 

AWS等でメモリ領域の小さいEC2インスタンスを使う際には設定しておくと安心です!