UbuntuのSwapの追加

Amazon VPSのサービスLightsailで、誰でもサーバーを作ってみよう!のコーナー。さくらインターネットのVPSでも使える情報かも!?

今まで色々と仕事で経験したきましたが、今は誰でも仕事以外でも簡単に情報を知れて実行し、楽しめる時代になったので、そのキッカケを作るためにも情報をまとめて書いていくそんなコーナーです。

さて今回は、UbuntuのSwapの追加です。Amazon LightsailでUbuntuをインストールするとSwapが作成されません。そのためメモリが少ないインスタンスだとメモリが枯渇する可能性があります。

メモリ不足でビルドが停止

今回はNGINXをビルドしていたのですが、こんなエラーが発生して停止してしまいました。コンパイラーエラーで、Killedされちゃっています。それ以外でも通常に運用していく際でもプロセスがKilledされちゃう場合があるのでメモリが少ないインスタンスだとSwapを用意しておいた方が良いです。

...
cc: internal compiler error: Killed (program cc1plus)
...

メモリの状況を確認

free コマンドで確認をしてみるとSwapが0B。sudo swapon –show とコマンドを打ち込んでも何も表示されません。そう、Swapが存在していない状態です。

$ sudo free -h
total used free shared buff/cache available
Mem: 479M 98M 179M 756K 202M 368M
Swap: 0B 0B 0B
$ sudo swapon --show

Swapを作成

ダミーファイルの作成

以前はSwapと言うパーティションを作成してSwapを活用していましたが、最近はSwap用ファイルを作成しそれをSwap領域として活用できるようになりました。そのため fallocate コマンを使用しSwap用のダミーファイルを作成します。(今回はメモリが512MBのサーバーのため、トップディレクトリにメモリの2倍の1GBの「swapfile」と言うダミーファイルを作成しました。)

$ sudo fallocate -l 1G /swap.img

rootのみのアクセス権に設定

作成した「swapfile」は他のユーザーでも読むことや実行が可能になってしまっています。セキュリティ的に危ないためアクセス権をrootのみ可能にします。

$ sudo chmod 600 /swap.img

Swap領域として使用する準備

今までで作成した「swapfile」は何も情報のない、ただのファイルです。ここでSwap領域として使用できるように mkswap のコマンドを使用します。そうするとダミーファイルであった「swapfile」にSwapの領域の情報が書き込まれます。

$ sudo mkswap /swap.img
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=...

Swapを有効化

作成したSwap領域はまだ作っただけで無効化されていますので swapon のコマンドでSwapとして有効化させます。

sudo swapon /swap.img

Swap領域の永続化

現状ですと有効化されたSwap領域は再起動を行ってしまうと無効化されてしまいます。再起動後も有効にしたい場合は「fstab」にSwap領域の情報を書き込まなければなりません。

$ sudo vi /etc/fstab
...
/swap.img swap swap defaults 0 0
...

再度メモリの状況を確認

再度 free -hsudo swapon –show でSwapの状況を確認してみます。最初には0BだったSwapが1GBで容量で有効化されています。

$ sudo free -h
total used free shared buff/cache available
Mem: 479M 94M 174M 756K 210M 371M
Swap: 1.0G 0B 1.0G
$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2

このように無事にSwapが追加されました。

さていかがだったでしょうか。また違う記事で違う設定を書いていこうと思います。