前置き
AWS Cloud9を演習で利用してきましたが、ディスク不足はあってもメモリ不足になることはありませんでした。Rails5を利用していたからでしょうか。今年はRails7を利用しています。
対処方法としてググると以下の記事がありました。この記事を読めばいいのですが、若干、環境が異なるため学生さんようにリンクを渡して「あとは頑張って」というのはちょっと厳しそうに思いました。
とりあえず、AWS Cloud9環境下での手順を示します。t2.microのインスタンスを使用していることを前提としています。
手順
(1)Cloud9にアクセスしてターミナルを開き、以下のコマンドを実行します。コマンドを実行する場所はどこでもよいです。
sudo dd if=/dev/zero of=/var/swapfile2 bs=16M count=128; sudo chmod 600 /var/swapfile2; sudo mkswap /var/swapfile2; sudo swapon /var/swapfile2
(2)新たに作成したスワップファイルを再起動後も使用できるように、以下のコマンドを実行します。
sudo vim /etc/fstab
(3)vimの編集画面で最終行に以下を追加します。
/var/swapfile2 swap swap defaults 0 0
これでとりあえず、元からある500MBのスワップファイル(/var/swapfile)に加えて、2GBのスワップファイル(/var/swapfile2)が使えるようになるのでメモリ不足は解消されると思います。
ちょっと整理する
ちなみに、上記のコマンドを実行したら、スワップファイルを確認するコマンド(sudo swapon -s)を実行すると2行表示されると思います。スワップファイルが2つある状態になっているということです。もともとあった/var/swapfileはいわないんじゃね?と思ったからは削除できます。以下のコマンドです。
sudo swapoff /var/swapfile
最初に上記のコマンドを実行しようとしたときに、元からあった/var/swapfileを消してから/var/swapfileを2GBで作り直そうとしたのですが、どうもスワップファイルを1つ設定した状態でそれをゼロにすることはできない(1つしか使用していないHDDをアンマウントできないのと同じ理由かなと)と思われます。なので、/var/swapfile2を作り、そのあとに、/var/swapfileを無効化すればよいかと思います。スワップファイルは別に何個あってもいいでしょうから、そこまで整理にこだわる必要はないかな。。。とは思いますけどね。