AWS Lightsail の小規模インスタンス(特に nano_3_0 など)では、メモリが限られているため、Docker イメージのビルドやアプリケーションの実行時にメモリ不足エラーが発生する可能性があります。この問題を解決するために、スワップ領域を追加することで仮想メモリを拡張できます。
スワップ領域は、物理メモリ(RAM)が不足した場合に、ディスク上に確保される仮想メモリ領域です。パフォーマンスは物理メモリより劣りますが、メモリ不足によるアプリケーションのクラッシュを防ぐことができます。
ssh -i ~/LightsailDefaultKey-ap-northeast-1.pem ec2-user@<インスタンスのIPアドレス>以下のコマンドを実行して、2GB のスワップファイルを作成します。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048このコマンドの説明:
dd: ディスクコピーコマンドif=/dev/zero: 入力ファイルとして/dev/zero(ゼロを生成する特殊ファイル)を使用of=/swapfile: 出力ファイルとして/swapfileを指定bs=1M: ブロックサイズを 1MB に設定count=2048: 2048 ブロック(合計 2GB)をコピー
セキュリティのため、スワップファイルのアクセス権限を root ユーザーのみに制限します。
sudo chmod 600 /swapfile作成したファイルをスワップ領域としてフォーマットします。
sudo mkswap /swapfileスワップ領域を有効にします。
sudo swapon /swapfileシステム再起動後もスワップ領域が自動的に有効になるように、/etc/fstab ファイルに設定を追加します。
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstabスワップ領域が正しく設定されたことを確認します。
free -m出力例:
total used free shared buff/cache available
Mem: 407 204 23 0 179 192
Swap: 2048 0 2048
インスタンスのディスク容量とメモリ要件に応じて、スワップ領域のサイズを調整できます。一般的な目安は以下の通りです:
- 2GB 未満の RAM: RAM サイズの 2 倍
- 2GB 〜 8GB の RAM: RAM サイズと同等
- 8GB 以上の RAM: 最低 4GB または必要に応じて調整
-
スワップ領域はディスク上に確保されるため、頻繁にアクセスするとディスクI/Oが増加し、システム全体のパフォーマンスが低下する可能性があります。
-
AWS Lightsail インスタンスでは、SSD ストレージが使用されているため、従来の HDD よりもスワップのパフォーマンス低下は少なくなります。
-
スワップ領域は一時的な解決策として有効ですが、アプリケーションが常に大量のメモリを必要とする場合は、インスタンスのアップグレード(例:nano_3_0 から micro_3_0 へ)を検討してください。
すべての手順を一度に実行するワンライナーコマンドは以下の通りです:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstabスワップ領域が不要になった場合は、以下の手順で削除できます:
sudo swapoff -v /swapfile
sudo sed -i '/swapfile/d' /etc/fstab
sudo rm /swapfile