Skip to content

Instantly share code, notes, and snippets.

@gouf
Created March 26, 2025 00:00
Show Gist options
  • Select an option

  • Save gouf/804318d946d87288e3584a73cf6462f2 to your computer and use it in GitHub Desktop.

Select an option

Save gouf/804318d946d87288e3584a73cf6462f2 to your computer and use it in GitHub Desktop.
Amazon Q が提案した、swap 領域の追加方法

スワップ領域の追加手順

AWS Lightsail の小規模インスタンス(特に nano_3_0 など)では、メモリが限られているため、Docker イメージのビルドやアプリケーションの実行時にメモリ不足エラーが発生する可能性があります。この問題を解決するために、スワップ領域を追加することで仮想メモリを拡張できます。

スワップ領域とは

スワップ領域は、物理メモリ(RAM)が不足した場合に、ディスク上に確保される仮想メモリ領域です。パフォーマンスは物理メモリより劣りますが、メモリ不足によるアプリケーションのクラッシュを防ぐことができます。

スワップ領域の追加手順

1. SSH でインスタンスに接続

ssh -i ~/LightsailDefaultKey-ap-northeast-1.pem ec2-user@<インスタンスのIPアドレス>

2. スワップファイルの作成

以下のコマンドを実行して、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)をコピー

3. スワップファイルのアクセス権限を設定

セキュリティのため、スワップファイルのアクセス権限を root ユーザーのみに制限します。

sudo chmod 600 /swapfile

4. スワップ領域としてフォーマット

作成したファイルをスワップ領域としてフォーマットします。

sudo mkswap /swapfile

5. スワップ領域を有効化

スワップ領域を有効にします。

sudo swapon /swapfile

6. 永続化設定

システム再起動後もスワップ領域が自動的に有効になるように、/etc/fstab ファイルに設定を追加します。

echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

7. スワップ領域の確認

スワップ領域が正しく設定されたことを確認します。

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 または必要に応じて調整

注意事項

  1. スワップ領域はディスク上に確保されるため、頻繁にアクセスするとディスクI/Oが増加し、システム全体のパフォーマンスが低下する可能性があります。

  2. AWS Lightsail インスタンスでは、SSD ストレージが使用されているため、従来の HDD よりもスワップのパフォーマンス低下は少なくなります。

  3. スワップ領域は一時的な解決策として有効ですが、アプリケーションが常に大量のメモリを必要とする場合は、インスタンスのアップグレード(例: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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment