【ペルシャ猫備忘録】AWS無料枠で試してみた!SWAP領域を追加する


こんにちは!
株式会社ビヨンド四国オフィスのペルシャ猫、いのうえです。

今回は、自分のAWSインスタンスでSWAP領域を作成してみたので
ペルシャ猫によるペルシャ猫のための備忘録としてブログに記します。
皆さんの参考になれば、うれしく思います!(*‘ω‘ *)

SWAPとは、メモリが足りない時にディスクにデータを移し一時保存してくれる機能のこと。
スワップアウトとは、メモリの一部をディスクに退避させる仕組み。
スワップインとは、スワップアウトされたデータをメモリに戻すこと。

メモリは、例えるとコンピュータの作業机です。
机が狭いと作業が遅くなってしまいますね。
だって、使ってないものを片づけたり、使うものを取り出したりしなくてはいけませんから。
ハードディスクは、例えるとコンピュータの作業机についている引き出しです。
スワップは、ハードディスクをメモリのように使い、
実際のメモリより大きいメモリがあるかのようにと錯覚させます。
ただ、メモリを使うより、ハードディスクを使うほうが作業をこなすのに時間がかかります。
よって、スワップを使うとコンピュータの動作は遅くなります。
なぜ、スワップを使うとコンピュータの動作は遅くなるのでしょう??
まず前提として、CPUで演算をするために必要なデータは必ず主記憶装置(メモリ)に展開する必要があります。
机が小さく狭い時に、机で作業を行う場合は一時的にデータを引き出しに入れるしかないので
引き出しにデータを入れる頻度が多くなって、スワップ使用量が増えます。
また、使いたいデータを机の上に出したいので、引き出しから机にデータを出す頻度も増えます。
引き出しにデータを入れたり(スワップアウト)、出したり(スワップイン)を頻繁に行うことになりますね。
このように、スワップアウトとスワップインが頻繁に繰り返されることをスラッシングといいます。
スワップはメモリよりも処理に時間がかかるので、
SWAP使用量が増えると、コンピュータの動作が遅くなる。というわけです。

SWAPが発生する原因として以下のようなことが考えられます。
①メモリが足りない。
②メモリの断片化が進んでまとまったメモリを確保できない。

SWAP領域を作成してみよう

[root@test-aws-harukainoue var]# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         226          75           0         681         596
Swap:             0           0           0

デフォルトでは、SWAP領域がなく、メモリだけを使用していることがわかります。

早速、SWAP領域を作成していきましょう!
まず、メモリ代わりにするSWAPファイルを作成します。
私は/var以下に「swapfile」というディレクトリを用意し、「swap」というファイルを作ります。

[root@test-aws-harukainoue var]# mkdir swapfile
[root@test-aws-harukainoue var]# ls -altr
drwxr-xr-x  2 root root    6 Feb  2 04:52 swapfile
[root@test-aws-harukainoue var]# cd swapfile
[root@test-aws-harukainoue swapfile]# pwd
/var/swapfile
[root@test-aws-harukainoue swapfile]# dd if=/dev/zero of=/var/swapfile/swap bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 13.6114 s, 78.9 MB/s
[root@test-aws-harukainoue swapfile]# ls -altr
-rw-r--r--  1 root root 1073741824 Feb 11 08:40 swap
[root@test-aws-harukainoue swapfile]# chmod 600 swap
[root@test-aws-harukainoue swapfile]# ls -altr
-rw-------  1 root root 1073741824 Feb 11 08:40 swap

間違って「swap」ファイルを編集しないように、パーミッションを「600」にしておきます。
※パーミッションを「600」にしていない場合、次のような警告が表示されます。

mkswap: /swap: insecure permissions 0644, 0600 suggested.

スワップファイルをSWAP領域用にフォーマットします。
さらに、スワップファイルを有効化します。

[root@test-aws-harukainoue swapfile]# mkswap ./swap
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=8227fefa-a6da-4c63-a9c3-ae21c06dad30
[root@test-aws-harukainoue swapfile]# swapon ./swap
[root@test-aws-harukainoue swapfile]# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         227          73           0         682         594
Swap:          1023           0        1023
[root@test-aws-harukainoue swapfile]# swapon -s
Filename                                Type            Size    Used    Priority
/var/swapfile/swap                      file            1048572 0       -2

SWAP領域ができました!!!

再起動してもSWAP領域が消えないように設定する

再起動後もSWAPを使えるようにマウントします。

[root@test-aws-harukainoue swapfile]# vi /etc/fstab

以下を記述し、上書きします。

/var/swapfile/swap swap swap defaults 0 0
:wq

再起動・・・・・・・・・

[root@test-aws-harukainoue ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         218          78           0         686         604
Swap:          1023           0        1023

再起動後もSWAPが使われるようになっているのがわかります。

普段、自分のAWSインスタンスの環境ではSWAPを使用しないのでOFFにします。
※SWAPを使う場合は、OFFする必要はありません。

[root@test-aws-harukainoue swapfile]# swapoff ./swap
[root@test-aws-harukainoue swapfile]# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         226          73           0         682         594
Swap:             0           0           0

まとめ

メモリが枯渇するとOOM killerによってプロセスが強制終了されてしまいます。
メモリが不足しているときに、応急処置として
一時保存領域SWAPを使うことで少しは、メモリが枯渇してしまう不安を和らげることができます。
メモリとSWAPを上手に使って、システムのハングアップを防ぎたいところです。
作成していたはずのSWAPが、再起動後に消えていた!なんてことがないように、マウントすることも忘れずに。

日々成長、日々前進。
毎日、私自身をアップデートしていかなければ!!!
最後まで読んでくださって、ありがとうございます。


この記事をかいた人

About the author

井上明香

ビヨンドに四国オフィス設立メンバーとして入社。IT業界に未経験で飛び込みました。ビヨンドの「賢いキャラ」確立のために日々奮闘中(笑)
地元が大好き。地元愛が止まらない。
小難しい技術ブログが書けるよう日々勉強。日々アップデート。