Ubuntu 22.04 LTSでのスワップメモリ設定
AWS EC2 の無料枠や低スペックの自己ホストサーバーでは、大きなパッケージ導入時に RAM が足りず、フリーズや OOM でプロセスが落ちることがあります。インスタンスタイプを上げる前に スワップファイル でディスクの一部を緊急メモリにすると、インストールやビルド中のピークを乗り越えやすくなります。Ubuntu 22.04 LTS の手順に加え、いつ使い、いつ使わないべきか をまとめます。

© Unsplash © Akshar Dave🌻
スワップの役割
スワップ はディスク(パーティションまたはファイル)の一部を RAM の退避領域として使う仕組みです。カーネルはすぐ使わないページをディスクへ移し、必要になったら戻します。Laravel や NestJS のような大きなパッケージ、npm/composer の依存解決など 短時間のメモリピーク では、物理 RAM だけでは足りない瞬間を埋められます。
ただしディスク I/O は RAM より大幅に遅いです。スワップが 常時フル稼働 ならレイテンシが悪化します。スワップは「余裕バッファ」であり「RAM の代替」ではありません。
Google Compute Engine や Amazon EC2 でメモリを増やすには、多くの場合インスタンスを停止してタイプ変更が必要です。予期しない OOM 再起動が続くと障害時間が伸びるため、開発・実験・低スペック試験ノード ではあらかじめスワップを用意しておくと安全です。商用本番は適切なサイジングやオートスケールが本筋です。
Windows では 仮想メモリ(ページファイル) として同じ概念があります。

Windows の仮想メモリ
サイズの目安
環境ごとに正解は違いますが、実務で使いやすい出発点は次のとおりです。
| 物理 RAM | スワップ目安 | 備考 |
|---|---|---|
| 1–2 GB(t2/t3.micro 級) | 2–4 GB | パッケージ導入・軽いビルド用 |
| 4 GB | 2–4 GB | ハイバネ不要なら RAM の 0.5–1 倍 |
| 8 GB 以上 | 1–2 GB または無し | 必要が明確でないなら最小限 |
- ディスク余裕が少ないのに巨大スワップを作らないでください。
fallocateが失敗する場合はddを使えます。- 以下は 4GB の
/swapfile例です。数字だけ変えれば流用できます。
設定手順
1. 現状確認
sudo free -m
sudo swapon --show

2. 既存スワップをオフ(サイズ変更時)
sudo swapoff -a
3. スワップファイル作成
sudo fallocate -l 4G /swapfile
失敗時:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
4. 権限・フォーマット・有効化
ルートのみ読み書き可能にします。
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
sudo free -m

5. 再起動後も有効化(/etc/fstab)
grep -n swapfile /etc/fstab || echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

6. 確認
sudo free -m
sudo swapon --show

swappiness と性能
vm.swappiness(0–100)はメモリ逼迫時にスワップをどれだけ積極的に使うかを決めます。Ubuntu Server では 60 前後がよく見られます。
- DB や遅延に敏感なサービス: 10–30 に下げる例が多いです。
- 低スペックのビルド専用: デフォルトのままで問題ないことも多いです。
一時適用:
sudo sysctl vm.swappiness=20
永続化例:
echo 'vm.swappiness=20' | sudo tee /etc/sysctl.d/99-swap.conf
sudo sysctl --system
swappiness を下げても OOM そのものは消えません。RAM が絶対的に不足していればプロセスは落ちるか極端に遅くなります。
本番での注意点
- 継続的なスワップ thrashing は障害です。
vmstat 1などでsi/soを監視してください。 - ルートボリュームが満杯の状態で大きなスワップを作ると、デプロイやログも同時に失敗します。
- 規制の厳しい環境では、メモリア内容がディスクに残る点を踏まえ暗号化スワップなどを検討してください。
- オーケストレータノードではプラットフォーム推奨を優先してください。
スワップの無効化
sudo swapoff -v /swapfile
sudo sed -i.bak '/swapfile/d' /etc/fstab
sudo rm /swapfile
sudo free -m
/etc/fstab 編集後は誤記で起動不能になり得るため、コンソール復旧手段を確認してから再起動してください。
参考文献
- Wikipedia: Virtual memory
- Wikipedia: Paging
- Ubuntu Server: Swap