AWSのEC2(RHEL 7.4)でスワップファイルを作成する
目次
概要
AWSのEC2インスタンスでお安く(もしくは無料枠で)サーバを構築する場合、 インスタンスタイプとして t2.micro を選択することが多いかと思います。 t2.micro はメモリを1GBしか搭載していないため、DBMSのようなメモリを多めに使用する ミドルウェアを起動するには足りなくて起動できないケースがあります。 インスタンスタイプを t2.medium などにアップすれば問題は解決しますが、 お金をケチりたい場合でかつ、あまり性能を求めない場合は、 ファイルでスワップ領域を作成するのが手っ取り早いです。
今回はLinuxのルートファイルシステム上に SWAPFILE という名前の1GiBのファイルを作成し、 これをスワップファイルとして設定します。 AWSのEC2で検証しましたが、AWSに特化した話ではないため、Red Hat系のLinuxであれば 同じ手順で作成できます。
余談ですが、EC2の初期状態ではスワップ領域って存在しないようですね。
構成
想定環境
AWS(Amazon Web Services)のEC2インスタンスを利用して検証しました。 サーバのスペックは以下のとおりです。項目 | 内容 |
---|---|
インスタンスタイプ | t2.micro |
vCPU | 1 |
メモリ | 1GB |
ディスク | SSD 10GiB |
リージョン | 日本 |
サーバ構成
OSバージョン
Red Hat Enterprise Linux 7.4 x86_64
環境構築
設定
事前の構成確認
スワップファイルを作成する前にシステム構成を確認します。 以降全てrootユーザで実行します。
$ sudo su - ←rootユーザにスイッチ Last login: Sat Aug 26 17:45:06 UTC 2017 on pts/0 # free ←メモリ使用状況の確認 total used free shared buff/cache available Mem: 1014736 81508 797232 12960 135996 775592 Swap: 0 0 0 ←スワップは存在しない # cat /proc/swaps ←スワップ構成の確認 Filename Type Size Used Priority ←スワップは存在しない # df ←ファイルシステム構成の確認 Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda2 10473452 1242724 9230728 12% / ←ルートファイルシステムに約9GiBの空きがある devtmpfs 487080 0 487080 0% /dev tmpfs 507368 0 507368 0% /dev/shm tmpfs 507368 12960 494408 3% /run tmpfs 507368 0 507368 0% /sys/fs/cgroup tmpfs 101476 0 101476 0% /run/user/1000
スワップファイルの作成
ルートファイルシステム上にスワップファイルとする空ファイルを作成します。 1GiBのスワップファイルを作成するため、サイズ512バイトのブロックを2,097,152(=2×1,024×1,024)個で 構成される /SWAPFILE という名前のファイルをddコマンドで作成します。 スワップファイルは一般ユーザに間違って消されないように、所有者rootでパーミッションを0600とします。
# dd if=/dev/zero of=/SWAPFILE bs=512 count=2097152 ←1GiBの空ファイルを作成 2097152+0 records in 2097152+0 records out 1073741824 bytes (1.1 GB) copied, 12.9585 s, 82.9 MB/s # chmod 600 /SWAPFILE ←パーミッションを0600に変更 # ls -l /SWAPFILE ←ファイルのパーミッションと所有者を確認 -rw-------. 1 root root 1073741824 Aug 29 13:40 /SWAPFILE
スワップファイルをスワップ領域として初期化
作成したスワップファイルを mkswap コマンドでスワップ領域として初期化します。
# mkswap /SWAPFILE ←スワップ領域として初期化 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=806577e1-789e-4819-8937-49bd7d1ffa4f # file /SWAPFILE ←ファイル属性の確認 /SWAPFILE: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=806577e1-789e-4819-8937-49bd7d1ffa4f
スワップ領域の有効化
作成したスワップファイルをスワップ領域として有効化します。
# swapon /SWAPFILE ←スワップ領域の有効化 # cat /proc/swaps ←スワップ構成の確認 Filename Type Size Used Priority /SWAPFILE file 1048572 0 -1 ←スワップ領域として認識されている # free ←メモリ構成の確認 total used free shared buff/cache available Mem: 1014736 83220 73296 13016 858220 748592 Swap: 1048572 0 1048572 ←1GiBのスワップ領域として認識されている
Linux起動時にスワップ領域を自動で有効化
上記設定だけではLinux再起動の度に swapon コマンドでスワップ領域を有効化しなければならないため、 fstab ファイルに設定を追加して、Linux起動時に自動でスワップ領域を有効化します。
# cd /etc/ # vi fstab
※ファイルの末尾に追加※ # # /etc/fstab # Created by anaconda on Tue Jul 11 15:57:39 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=de4def96-ff72-4eb9-ad5e-0847257d1866 / xfs defaults 0 0 /SWAPFILE swap swap defaults 0 0 ←この行を追加
以上で設定は終わりです。