初期状態
$ free
total used free shared buffers cached
Mem: 1019328 240720 778608 156 19124 120528
-/+ buffers/cache: 101068 918260
Swap: 0 0 0
Swap: 0 0 0
!!
User Data で /etc/fstab に書き込むようにする
SWAPFILENAME=/swap.img
MEMSIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
if [ $MEMSIZE -lt 2097152 ]; then
SIZE=$((MEMSIZE * 2))k
elif [ $MEMSIZE -lt 8388608 ]; then
SIZE=${MEMSIZE}k
elif [ $MEMSIZE -lt 67108864 ]; then
SIZE=$((MEMSIZE / 2))k
else
SIZE=4194304k
fi
fallocate -l $SIZE $SWAPFILENAME && mkswap $SWAPFILENAME && chmod 600 $SWAPFILENAME && swapon $SWAPFILENAME
echo "${SWAPFILENAME} swap swap defaults 0 0" >> /etc/fstab
基本的には クラスメソッドさんの記事 を拝借しつつ、そのままだといろいろ不具合あったので以下を修正。
${((MEMSIZE * 2))}
だと bash 的にエラーなので$((MEMSIZE * 2))
に$((MEMSIZE / 2))
も同様- スワップファイルのパーミッションを
600
にしないとセキュアじゃないメッセージが出るのでswapon
の前にchmod 600 $SWAPFILENAME
を追加
Swap 設定後
[ec2-user@ip-10-0-0-223 ~]$ free
total used free shared buffers cached
Mem: 1019328 243260 776068 156 19520 120876
-/+ buffers/cache: 102864 916464
Swap: 2038652 0 2038652
設定された。
参考: