【Linux】swap領域を作る方法

t2.microインスタンスを使用していて、メモリ不足でプロセスが死んでプロダクトが止まる、ということがあったので、スワップ領域の確保を行った際に調べたことまとめ。

swap領域とは?

コンピュータ・システムの動作中に,メイン・メモリー実メモリー)を使い切りそうになり,空き容量が不足した場合,実メモリーから使用中の内容の一部を取り出して退避するためのハード・ディスク上の領域です。

参考

実メモリ(一般にスペックを話す際に言ってる「メモリ」のこと。RAM)が不足した際に、仮想メモリ(swap領域をROMに作る)があると、そこに処理の一部を逃して、RAMを空けることができる。

反対に、仮想メモリがない状態で実メモリがいっぱいになると、Linuxごと動かなくなるのを避けるためにランダムにプロセスが強制終了されてしまう。

例えば僕の例でいうと、unicornプロセスがメモリを食い実メモリが圧迫されたことで、unicornプロセスが強制終了されてプロダクトが止まってしまったということがあった。

ただし、swap領域へのアクセスや処理速度は実メモリと比べてかなり遅く、頻繁にswap領域にアクセスしなければいけない状態はパフォーマンスがかなり悪くなるので、十分な実メモリを積んでいることが最も望ましい。

そのため、swap領域は「保険」のように使用すべきだ。

linuxでのswap領域の作り方

swap file作成

dd if=/dev/zero of=/swapfile bs=1M count=1024

パーミッション変更

chmod 600 /swapfile

作成したスワップファイルをSwap領域用にフォーマット

mkswap /swapfile

スワップファイルを有効化してSwap領域のサイズを増やす

swapon swapfile

swapを開放するには

swapoff swapfile

ちなみにswap領域が作られたかどうかはtop, freeコマンドなどで確認できる。