
AWS EC2でswap領域を設定するベストプラクティス完全ガイド【2026年版】
AWS EC2インスタンスはデフォルトでswap領域が存在せず、メモリ不足になるとOOM Killerがプロセスを強制終了します。本番環境でこの状況を回避するには、適切なswap設定が不可欠です。
このガイドでは、AWS公式ナレッジセンターが推奨するswapfile方式を中心に、Amazon Linux 2023のzram対応・インスタンスタイプ別の推奨サイズ・vm.swappinessチューニング・起動時の自動有効化まで、一連の手順を詳しく解説します。
筆者はt3.microやt4g.smallなど小メモリのEC2インスタンスで本手順を実際に検証・運用しています。
{{IMAGE: EC2インスタンスのメモリ使用状況とswap領域が有効になっている状態のtopコマンド出力例}}
この記事で分かること
- AWS EC2にswap領域が必要な理由と注意点
- swapfile方式の作成・設定・永続化手順(Amazon Linux 2 / Amazon Linux 2023 / Ubuntu対応)
- インスタンスタイプ別の推奨swapサイズ
- Amazon Linux 2023のzramとswapfileの使い分け
vm.swappinessの最適値とEC2での推奨設定- よくあるトラブルと解決策
前提条件
このガイドは以下の環境で動作を確認しています。
- OS: Amazon Linux 2、Amazon Linux 2023、Ubuntu 22.04 LTS
- インスタンスタイプ: t3.micro、t3.small、t4g.small(他のインスタンスタイプにも適用可能)
- 必要な権限: sudo(root権限)
- 前提知識: SSHでEC2に接続できること、基本的なLinuxコマンド操作
# 現在のメモリ・swap状況を確認するコマンド
free -h
# 期待する出力(swap未設定の場合)
# total used free shared buff/cache available
# Mem: 967Mi 234Mi 132Mi 2.0Mi 600Mi 599Mi
# Swap: 0B 0B 0B
なくてもOK: EBS追加ボリュームは不要です。このガイドではルートボリューム上にswapfileを作成する方法を採用しています。
全体の流れ
このガイドは以下の5ステップで構成されています。
- swapファイルの作成 — 約2分
- swapの有効化と権限設定 — 約1分
- 起動時の自動有効化(fstab設定) — 約1分
- vm.swappiness のチューニング — 約2分
- Amazon Linux 2023のzram対応(任意) — 約3分
{{IMAGE: EC2のswap設定手順全体フロー図(swapファイル作成→有効化→永続化→チューニング)}}
AWS EC2にswap領域が必要な理由
EC2はデフォルトでswapがない
AWS EC2インスタンス(大部分のインスタンスタイプ)はswap領域なしで起動します。これはAWSが意図的に行っている設計で、EBSのI/Oを最小化しパフォーマンスを安定させる目的があります。
しかし、swap無しの状態でメモリが枯渇すると:
- OOM Killer(Out-of-Memory Killer) が起動し、重要なプロセスを強制終了
- Webサーバーやデータベースが突然停止
- 場合によってはインスタンス全体が応答不能になる
小メモリインスタンス(t3.micro: 1GiB、t3.nano: 512MiB)でNode.jsやRuby on Railsのビルドを行う場合など、一時的にメモリを大量消費するケースでswapは特に有効です。
swapfile方式が推奨される理由
EC2でswapを設定する方法は主に2つあります:
| 方式 | 説明 | メリット | デメリット |
|---|---|---|---|
| swapfile方式 | ルートEBS上にファイルとして作成 | 手順が簡単、追加コストなし | I/O性能がやや落ちる |
| EBSパーティション方式 | 別途EBSを追加してパーティション化 | I/O性能が高い | EBSコスト追加、手順が複雑 |
| インスタンスストア方式 | エフェメラルストレージを利用 | 無料、高速 | インスタンス停止でデータ消失、対応インスタンスが限定的 |
AWSの公式ナレッジセンター(AWS re:Post)ではswapfile方式を推奨しています。追加コストなしで設定でき、ほとんどのユースケースで十分な性能が得られます。
インスタンスタイプ別の推奨swapサイズ
Red Hat(RHEL)の推奨ガイドラインとAWSの実運用経験をもとにした推奨サイズです:
| インスタンスタイプ | メモリ | 推奨swapサイズ |
|---|---|---|
| t2.nano / t3.nano | 512MiB | 1GiB |
| t2.micro / t3.micro / t4g.micro | 1GiB | 2GiB |
| t2.small / t3.small / t4g.small | 2GiB | 2GiB |
| t2.medium / t3.medium | 4GiB | 2GiB |
| t3.large / t3a.large / t4g.large | 8GiB | 4GiB |
| m5.large / m6g.large | 8GiB | 4GiB(任意) |
| m5.xlarge以上 | 16GiB以上 | 通常不要 |
一般的なルール(Red Hat推奨):
- RAM 2GiB未満 → RAM × 2のswap
- RAM 2GiB〜8GiB → RAM と同量のswap
- RAM 8GiB〜64GiB → RAM × 0.5のswap
- RAM 64GiB以上 → 4GiB(最低限)
注意: 大規模インスタンスでswapが頻繁に使用される場合はインスタンスタイプのアップグレードを検討してください。swapはあくまでバッファであり、常時スワッピングが発生する状態は根本的なリソース不足のサインです。
ステップ1: swapファイルの作成
swapファイルを作成する方法は2つあります。ファイルシステムの種類によって使えるコマンドが異なります。
方法A: fallocateコマンドを使う(推奨・ext4/xfs)
fallocateは実際にデータを書き込まずにファイルサイズを確保するため高速です。
# 2GiBのswapファイルを作成(サイズは環境に合わせて調整)
sudo fallocate -l 2G /swapfile
注意: btrfsファイルシステムでは
fallocateが使えません。その場合は方法Bを使用してください。
方法B: ddコマンドを使う(汎用・btrfsでも動作)
# 2GiBのswapファイルを作成(bs=128M × count=16 = 2GiB)
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# 進捗確認付きで実行する場合
sudo dd if=/dev/zero of=/swapfile bs=128M count=16 status=progress
bs(ブロックサイズ)とcountの組み合わせでサイズを指定します:
| 目的サイズ | コマンド例 |
|---|---|
| 1GiB | bs=128M count=8 |
| 2GiB | bs=128M count=16 |
| 4GiB | bs=128M count=32 |
| 8GiB | bs=128M count=64 |
ファイル作成の確認
ls -lh /swapfile
# 期待する出力
# -rw-r--r-- 1 root root 2.0G Apr 7 10:00 /swapfile
✅ ステップ1完了の確認: /swapfile が指定サイズで作成されていること
ステップ2: swapの有効化と権限設定
セキュリティ上の権限設定
swapファイルはrootのみが読み書きできるように設定します。これはLinuxのセキュリティベストプラクティスです。
# root以外のアクセスを拒否
sudo chmod 600 /swapfile
# 権限確認
ls -lh /swapfile
# 期待する出力
# -rw------- 1 root root 2.0G Apr 7 10:00 /swapfile
なぜ必要か: swap領域には実行中プロセスのメモリ内容(パスワード等を含む可能性)が書き込まれます。
chmod 600でrootのみがアクセスできる状態にすることがセキュリティ上必須です。
swapファイルとしてフォーマット
# mkswapでswap領域を初期化
sudo mkswap /swapfile
# 期待する出力
# Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
# no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
swapを有効化
# swaponでswapを有効化
sudo swapon /swapfile
# swap状況を確認
sudo swapon --show
# 期待する出力
# NAME TYPE SIZE USED PRIO
# /swapfile file 2G 0B -2
# free -hでも確認できます
free -h
# 期待する出力
# total used free shared buff/cache available
# Mem: 967Mi 234Mi 132Mi 2.0Mi 600Mi 599Mi
# Swap: 2.0Gi 0B 2.0Gi
{{IMAGE: free -hコマンドでswap領域2GiBが有効になっている状態のターミナル出力}}
✅ ステップ2完了の確認: free -hでSwap行に値が表示されること
ステップ3: 起動時の自動有効化(fstab設定)
現時点ではインスタンスを再起動するとswapが無効になります。/etc/fstabに設定を追加して永続化します。
fstabのバックアップ(重要)
# 必ずバックアップを取ってから編集してください
sudo cp /etc/fstab /etc/fstab.bak
fstabに追記
# echoでfstabに追記(直接編集でも可)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
またはsudo vim /etc/fstabで直接編集して以下の行を末尾に追加:
/swapfile none swap sw 0 0
各フィールドの意味:
| フィールド | 値 | 意味 |
|---|---|---|
| デバイス | /swapfile |
swapファイルのパス |
| マウントポイント | none |
swapはマウントポイント不要 |
| ファイルシステム | swap |
swap用 |
| オプション | sw |
swap有効化 |
| dump | 0 |
バックアップ対象外 |
| pass | 0 |
fsckスキャン対象外 |
設定の確認
# fstabの設定が正しいか確認
sudo cat /etc/fstab | grep swap
# 再起動後もswapが有効か確認するには再起動後に確認
# sudo reboot ← 実行後に下記で確認
# free -h
# sudo swapon --show
よくあるミス: fstabの書式ミスがあるとインスタンスが起動しなくなります。コピー&ペーストで追記し、
sudo mount -aで事前確認することをお勧めします。
# fstabの検証コマンド(エラーが出ないことを確認)
sudo mount -a
✅ ステップ3完了の確認: sudo mount -aでエラーが出ないこと。再起動後もfree -hでswapが表示されること
ステップ4: vm.swappiness のチューニング
vm.swappinessは、Linuxカーネルがいつswapを使用するかの積極性を0〜100の値で制御するパラメータです。
swappinessの意味
| 値 | 挙動 |
|---|---|
| 0 | 物理メモリが枯渇するまでswapを使用しない |
| 10 | swapを極力使わず、RAMを優先 |
| 60 | Linuxデフォルト値。バランス型 |
| 100 | 積極的にswapを使用 |
EC2での推奨値
EC2ではEBSのI/O性能がRAMより大幅に劣るため、swappinessを低く設定することでI/Oを最小化できます。
# 現在の値を確認
cat /proc/sys/vm/swappiness
# デフォルト: 60
# 一時的に変更(再起動後にリセットされる)
sudo sysctl vm.swappiness=10
# 確認
cat /proc/sys/vm/swappiness
# 10
永続的なswappiness設定
# /etc/sysctl.confに追記
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
# または /etc/sysctl.d/ ディレクトリに個別ファイルを作成(推奨)
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
# 設定を即時反映
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
# 確認
cat /proc/sys/vm/swappiness
# 10
vm.swappinessの推奨値について: AWS公式は特定の値を明記していませんが、多くのAWSエンジニアやDevelopersIOのガイドでは10〜20を推奨しています。データベースサーバーの場合は1〜5にする場合もあります。
{{IMAGE: htopやtopコマンドでswap使用量と物理メモリ使用量がモニタリングされているスクリーンショット}}
✅ ステップ4完了の確認: cat /proc/sys/vm/swappinessが設定した値(例: 10)を表示すること
ステップ5: Amazon Linux 2023のzram対応
Amazon Linux 2023(AL2023)は、メモリ512MiB未満のインスタンス(t4g.nano等)でzramが自動有効化されます。
zramはRAM上に圧縮ブロックデバイスを作成するswap方式で、EBSへのI/Oが不要な反面、CPU負荷が増加します。本番用途でEBSベースのswapfileと共存させる方法を紹介します。
現在のswap状態確認
# AL2023でのswap状態確認
sudo swapon --show
# zramが有効な場合の出力例
# NAME TYPE SIZE USED PRIO
# /dev/zram0 partition 452M 0B 100
AL2023でswapfileを追加する
AL2023では標準のswapfile作成手順が動作します(zramと共存可能):
# swapfileを作成(手順はステップ1〜3と同様)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 両方のswapが有効になっていることを確認
sudo swapon --show
# NAME TYPE SIZE USED PRIO
# /dev/zram0 partition 452M 0B 100
# /swapfile file 2G 0B -2
zramを無効化してswapfileのみを使用する場合
パフォーマンス最適化のためzramを無効化してEBSベースのswapfileのみを使いたい場合:
# zramの状態確認
systemctl status systemd-zram-setup@zram0.service
# zramを一時的に無効化
sudo swapoff /dev/zram0
# 再起動時もzramを無効化
sudo systemctl disable systemd-zram-setup@zram0.service
# swapfileがfstabに設定されていることを確認
cat /etc/fstab | grep swap
# /swapfile none swap sw 0 0
どちらを選ぶべきか: メモリが極めて少ない(512MiB以下)インスタンスではzramが有効な選択肢です。1GiB以上のインスタンスではzramを無効化し、EBSベースのswapfileを推奨します。
スワップの使用状況モニタリング
リアルタイム確認
# swap使用量をリアルタイムで確認
watch -n 5 'free -h'
# 詳細なswap情報
vmstat 1 5
# topコマンドでの確認(SIがswap in、SOがswap out)
top
# topのKiB Swap行を確認
どのプロセスがswapを使用しているか確認
# swapを使用しているプロセスのリスト
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3 "\n"}' $file 2>/dev/null;
done | sort -k 2 -n -r | head -20
# smemコマンドを使う場合(インストールが必要)
sudo yum install smem -y # Amazon Linux
sudo apt install smem -y # Ubuntu
smem -r -k | head -20
{{IMAGE: vmstatコマンドやtopコマンドでswapのsi/soカラムを確認している状態のスクリーンショット}}
トラブルシュート
| 症状 | 原因 | 解決策 |
|---|---|---|
fallocate: fallocate failed: Operation not supported |
btrfsファイルシステムに未対応 | ddコマンドを使用する |
swapon: /swapfile: insecure permissions 0644, 0640 suggested |
ファイルの権限が不適切 | sudo chmod 600 /swapfile を実行 |
| 再起動後にswapが無効 | fstabへの追記が漏れている | /etc/fstabに/swapfile none swap sw 0 0を追加 |
mount: /etc/fstab: parse error |
fstabの書式が正しくない | /etc/fstab.bakからリストアしてやり直す |
mkswap: error: swap area needs to be at least 40 KiB |
swapファイルが小さすぎる | 最低でも64MiB以上で作成する |
| スワッピングが頻発してパフォーマンス低下 | メモリが根本的に不足 | インスタンスタイプのアップグレードを検討 |
| AL2023でzramとswapfileが競合 | 優先度(PRIO)の問題 | swapon -p 10 /swapfileで優先度を調整 |
swapfile削除の手順
不要になったswapfileを削除する場合の手順です。
# swapを無効化
sudo swapoff /swapfile
# fstabから削除
sudo sed -i '/\/swapfile/d' /etc/fstab
# ファイルを削除
sudo rm /swapfile
# 確認
free -h
# Swap行が0Bになっていることを確認
まとめ
このガイドでは、AWS EC2インスタンスへのswap領域設定について、以下の手順で解説しました。
- ステップ1: swapファイルの作成(
fallocateまたはddコマンド) - ステップ2: セキュリティ権限設定(
chmod 600)とswap有効化(mkswap→swapon) - ステップ3:
/etc/fstabへの追記による起動時自動有効化 - ステップ4:
vm.swappiness=10によるEC2向けパフォーマンスチューニング - ステップ5: Amazon Linux 2023のzram対応(必要な場合)
EC2のswapfileはOOM Killerによるプロセス強制終了の防止や、一時的なメモリスパイク対策として有効です。ただし、swap領域は根本的なメモリ不足の解決策ではありません。スワッピングが日常的に発生するようであれば、より大きなインスタンスタイプへのアップグレードを検討してください。
インスタンスタイプ別の推奨設定を参考に、運用環境に合ったswapサイズとvm.swappiness値を設定することで、EC2インスタンスの安定稼働を実現できます。




