Back to page

 Print 

技術系備忘録​/AWS​/EC2 AmazonLinuxにSWAPを設定 :: シンクリッジ

xpwiki:技術系備忘録/AWS/EC2 AmazonLinuxにSWAPを設定

EC2 では t2 シリーズを選択するケースがけっこう多い気がします。

開発用途の場合はきっとそうなるだろうし、本番用途でもそこそこの規模なら t2 で十分って判断もありそうです。

が、t2 シリーズで Amazon Linux を構築してみると、デフォルトではスワップが存在してないハズです(よね?きっと)。

スワップを常用しちゃうような負荷ならもっとスペックを上げるべきだと思いますが、そうじゃなくてもスワップがナシっていうのはかなり不安です。

というわけで、OS 起動時にスワップ領域を作るスクリプトです。

ネット上に色々出てた情報を参考にしています。感謝です。

# vi /etc/rc.local

↓以下を追記(コメントに日本語が入っているので文字コードに注意すべし)

# enable swap #####################

# スワップファイル名
SWAPFILENAME=/swap.img

# 既存のファイルを削除
rm $SWAPFILENAME


# 搭載メモリ(KB)取得
MEMSIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`

# メモリ量に応じてスワップサイズを算出
if [ $MEMSIZE -lt 2097152 ]; then
	SIZE=$((MEMSIZE * 2))
elif [ $MEMSIZE -lt 8388608 ]; then
	SIZE=${MEMSIZE}
else
	SIZE=8388608
fi
#echo $SIZE

# 空き容量(KB)を取得
AVAILABLE=`/bin/df / | /usr/bin/tail -1 | /bin/sed -r 's/^\S+\s+\w+\s+\w+\s+(\w+)\s+\S+*%\s+\/$/\1/'`
#echo $AVAILABLE

# スワップが大き過ぎないよう調整(1Gは空けとくようにする)
if [ $SIZE -gt $((AVAILABLE - 1048576)) ]; then
 	SIZE=$((AVAILABLE - 1048576))
fi

# 小さ過ぎるようなら作らない
if [ $SIZE -gt 10000 ]; then
	fallocate -l ${SIZE}k $SWAPFILENAME && mkswap $SWAPFILENAME && swapon $SWAPFILENAME
fi
  • 環境によってサイズを調整するようになっています。吊るしの状態で色々な環境に使えるようしてみました。が、固定であるほうが望ましいような場合には適宜変更してください。
  • dd ではなく fallocate を使うことで、ストレージアクセスを最小限にして、無駄に課金されないよう考慮しています。

Last-modified: 2018-01-11 (Thu) 10:03:04 (JST) (2465d) by takatsuka