普段ドット絵をつくったり趣味アプリケーション開発で遊んだりしてる人間です。どっちも初心者なのでよろしくね。

困ったこと

 過去、Lightsail(Amazon Linux2)上にWordPress環境を構築しました。このサイトのサーバ。

 今回、新しくここにアプリケーションサーバを立ててやりたいことができたので、関連モジュールをyum installしようとしたところ、メモリが足りないと怒られました。そんなに?

$ sudo yum groupinstall "Development Tools"

〜〜中略〜〜

Error downloading packages:
elfutils-0.176-2.amzn2.x86_64: [Errno 5] [Errno 12] Cannot allocate memory
perl-Git-2.32.0-1.amzn2.0.1.noarch: [Errno 5] [Errno 12] Cannot allocate memory

 そんなにでした。

 今までの経験上、パッケージのインストールにおいてメモリ不足が原因でコケるなんてこと無かったのでびっくりしました。
 実際、インスタンスに割り当てているメモリ容量はめっちゃ少ない。超ケチってます。

 実はこれ以前にも、メモリ不足が思いあたる節がありました。

$ sudo less /var/log/mysqld.log

[ERROR] InnoDB: Cannot allocate memory for the buffer pool

 参考:Cannot allocate memory for the buffer pool でMySQLが落ちる

 これ、本ブログのデータベースに利用しているMySQLさん。メモリ不足で落ちちゃうことが何度かあったんです。
 え〜〜〜メモリ足さなきゃ〜〜〜???う〜〜〜〜ん、でも慢性的に困ってることじゃないしな〜〜〜〜ケチりたいからな〜〜〜

どうする??

 そういえばSwapってどうなってるんだろ??

$ free -h
total used free shared buff/cache available
Mem: **** **** **** *****
Swap: 0B 0B 0B

 わお、インスタンスの設定メモリ据え置きでSwapさんお留守。今まで全く気にしてませんでした。やば。

 そんなこんなで、とりあえずSwapを設定することに。

 選択肢としてEBSを借りてアタッチすることもできますが、メモリサイズもケチってるくらいです。そんなかっちりしたもの作らないつもりだし、インスタンス内のストアも余裕ある。

$ df -m
ファイルシス 1M-ブロック 使用 使用可 使用% マウント位置
〜〜〜
/dev/*** **** **** **** 17% /
〜〜〜

 じゃあストレージ切っちゃお。

 やること決まったのでやっていきます。実際どうすればいいかは全然わからんので調べながら。

やったこと

 上記の通り、Lightsailインスタンス内のストレージを切ってSwap領域を確保することにしました。やることは以下の通り。

  1. スナップショット取得
  2. Swap用の空ファイル作成
  3. ファイルをSwap領域に設定/有効化
  4. Swap領域の確認
  5. システムブート時のアタッチ設定

参考:https://qiita.com/s8ta/items/696fc68b27b91128251a

1.スナップショット取得

2.Swap用の空ファイル作成

 ここから作業に入るよ。まずは、ストレージを切ってSwap用の空ファイルを作ります。ストレージには余裕があったので、とりあえず困らなさそうな4GBを用意。

$ dd if=/dev/zero of=/swapfile bs=1M count=4096
$ chmod 600 /swapfile

3.ファイルをSwap領域に設定/有効化

 2.で作成したファイルをSwap領域に仕立て上げます。mkswapでSwap領域に設定して、swaponで有効化する流れみたい。

$ mkswap /swapfile
$ swapon /swapfile
4096+0 レコード入力
4096+0 レコード出力
294967296 バイト (4.3 GB) コピーされました、 65.9043 秒、 65.2 MB/秒
スワップ空間バージョン 1 を設定します。サイズ = 4 GiB (4294963200 バイト)
ラベルはありません, UUID=a5b757e4-6b9f-4c5b-b235-1628102e7844

 できたの???

4.Swap領域の確認

 free -hで改めてメモリ状況を確認してみます。

$ free -h
total        used        free      shared  buff/cache   available
Mem: ~中略~
Swap: 4.0G 256K 4.0G

 Swapさん!!!!

5.システムブート時のアタッチ設定

 よかったよかった。ってことでfstabに書いて起動時にマウント設定。

echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

 インスタンス再起動して検証。

$ free -h
total used free shared buff/cache available
Mem: 983M 595M 72M 204K 315M 250M
Swap: 4.0G 256K 4.0G

 やったね!

解決したよ

 Swap領域ができて満足しちゃいそうになりましたが、

$ sudo yum groupinstall "Development Tools"
〜〜中略〜〜
完了しました!

 こんどはメモリ不足でコケずにできた!!!!

 そんなこんなでSwap用意できたので、今回の事象に限らずいろんな挙動が安定するといいなと思います。よかった。