「メモリ使用率が100%近くになってシステムが重い…」 「アプリケーションが突然クラッシュする」 「大きなファイルを開くとフリーズしてしまう」
こんな経験はありませんか?
Linuxのスワップ領域は、物理メモリ(RAM)が不足した時の「保険」として機能する重要な仕組みです。適切に設定すれば、メモリ不足によるシステムクラッシュを防ぎ、より多くのアプリケーションを同時に実行できるようになります。
でも、「スワップって本当に必要?」「どれくらいのサイズにすればいい?」「SSDでも使って大丈夫?」など、疑問も多いですよね。
この記事では、Linuxスワップ領域について、基本的な仕組みから実践的な設定方法、パフォーマンスチューニングまで、すべてを分かりやすく解説します。これを読めば、あなたのLinuxシステムを最適化できるようになりますよ!
スワップ領域の基本を理解しよう

スワップとは何か?
スワップ領域を、図書館の書庫に例えてみましょう。
メモリとスワップの関係:
- RAM(物理メモリ):すぐ手に取れる本棚(高速アクセス)
 - スワップ領域:地下の書庫(低速だが大容量)
 - CPU:本を読む人
 
本棚がいっぱいになったら、あまり読まない本を書庫に移動。
必要になったらまた本棚に戻す。
これがスワップの基本的な仕組みです。
なぜスワップが必要なのか
スワップのメリット:
- メモリ不足対策:物理メモリを超えるデータを扱える
 - システム安定性:OOM Killer(メモリ不足時の強制終了)を回避
 - 休止状態(Hibernate):メモリ内容をディスクに保存
 - メモリ最適化:使用頻度の低いデータを退避
 
スワップが特に重要な場面:
- メモリが少ないシステム(4GB以下)
 - 大規模なコンパイル作業
 - 仮想マシンの運用
 - データベースサーバー
 - デスクトップ環境での多重タスク
 
スワップ領域の確認方法
現在のスワップ状態を確認
# スワップの使用状況を確認
free -h
# 出力例
              total        used        free      shared  buff/cache   available
Mem:           7.7G        3.2G        1.8G        245M        2.7G        4.0G
Swap:          2.0G        512M        1.5G
# より詳細な情報
swapon --show
# 出力例
NAME      TYPE      SIZE   USED PRIO
/dev/sda2 partition   2G 512.3M   -2
/proc/meminfoでの詳細確認
# スワップ関連の詳細情報
cat /proc/meminfo | grep -i swap
# 出力例
SwapCached:        45236 kB
SwapTotal:       2097148 kB
SwapFree:        1571892 kB
vmstatでリアルタイム監視
# 1秒ごとにメモリとスワップの状態を表示
vmstat 1
# si: スワップイン(ディスク→メモリ)
# so: スワップアウト(メモリ→ディスク)
スワップパーティションの作成

新規パーティションの作成
# 1. パーティションツールを起動
sudo fdisk /dev/sdb
# 2. fdisk内での操作
n  # 新規パーティション作成
p  # プライマリパーティション
1  # パーティション番号
   # 開始セクタ(Enter)
+4G # サイズ指定(4GBの例)
t  # タイプ変更
82 # Linux swap
w  # 書き込み
# 3. スワップ領域として初期化
sudo mkswap /dev/sdb1
# 4. スワップを有効化
sudo swapon /dev/sdb1
# 5. 優先度を指定して有効化(オプション)
sudo swapon -p 10 /dev/sdb1
/etc/fstabへの登録
# 永続化のため/etc/fstabに追加
echo '/dev/sdb1 none swap sw 0 0' | sudo tee -a /etc/fstab
# またはUUIDを使用(推奨)
sudo blkid /dev/sdb1  # UUIDを確認
# UUID=xxx-xxx-xxx none swap sw 0 0
スワップファイルの作成
スワップファイル vs スワップパーティション
スワップファイルのメリット:
- サイズ変更が簡単
 - パーティション分割不要
 - 動的な追加・削除が可能
 
スワップパーティションのメリット:
- わずかに高速
 - 休止状態(Hibernate)により適している
 - 従来からの標準的な方法
 
スワップファイルの作成手順
# 1. スワップファイルを作成(4GBの例)
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
# または高速な方法(fallocateを使用)
sudo fallocate -l 4G /swapfile
# 2. 適切な権限を設定
sudo chmod 600 /swapfile
# 3. スワップ領域として初期化
sudo mkswap /swapfile
# 4. スワップを有効化
sudo swapon /swapfile
# 5. 確認
swapon --show
# 6. /etc/fstabに追加(永続化)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
複数のスワップファイル管理
# 追加のスワップファイル作成
sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon -p 5 /swapfile2  # 優先度5で追加
適切なスワップサイズの決め方
従来の推奨サイズ
一般的なガイドライン:
| 物理メモリ | 推奨スワップサイズ | 休止状態を使う場合 | 
|---|---|---|
| 2GB以下 | メモリの2倍 | メモリの3倍 | 
| 2-8GB | メモリと同じ | メモリの2倍 | 
| 8-64GB | 最低4GB | メモリの1.5倍 | 
| 64GB以上 | 最低4GB | 非推奨 | 
用途別の推奨設定
デスクトップ環境:
# 一般的な使用(8GB RAM)
スワップ: 4-8GB
# 動画編集・3D作業(16GB RAM)
スワップ: 8-16GB
サーバー環境:
# Webサーバー(軽量)
スワップ: 2-4GB
# データベースサーバー
スワップ: メモリの25-50%
# コンテナホスト(Docker/Kubernetes)
スワップ: 最小限またはなし
動的なサイズ調整
# 現在のスワップサイズを確認
free -h
# 一時的にスワップを無効化
sudo swapoff /swapfile
# サイズを変更(例:8GBに拡張)
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
sudo mkswap /swapfile
sudo swapon /swapfile
スワップの優先順位とswappiness
swappinessパラメータ
swappinessは、カーネルがどれくらい積極的にスワップを使うかを制御します(0-100)。
# 現在の値を確認
cat /proc/sys/vm/swappiness
# 一時的に変更(例:10に設定)
sudo sysctl vm.swappiness=10
# 永続的に変更
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
推奨値:
- デスクトップ(SSD): 10
 - デスクトップ(HDD): 60(デフォルト)
 - サーバー: 30-60
 - データベースサーバー: 1-10
 
スワップの優先順位設定
# 優先順位付きで複数スワップを設定
sudo swapon -p 100 /dev/sda2  # 最高優先度
sudo swapon -p 50 /swapfile   # 中優先度
sudo swapon -p 10 /dev/sdb1   # 低優先度
# /etc/fstabでの設定
/dev/sda2 none swap sw,pri=100 0 0
/swapfile none swap sw,pri=50 0 0
zswapとzramの活用

zswap(圧縮スワップキャッシュ)
zswapは、スワップアウトする前にメモリ内で圧縮する機能です。
# zswapを有効化
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
# 圧縮アルゴリズムを確認
cat /sys/module/zswap/parameters/compressor
# ブート時に有効化(GRUB設定)
sudo nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT に追加
# zswap.enabled=1 zswap.compressor=lz4
sudo update-grub
zram(圧縮RAMディスク)
# zram-toolsをインストール(Ubuntu/Debian)
sudo apt install zram-tools
# 設定ファイルを編集
sudo nano /etc/default/zramswap
# 設定例
ALGO=lz4
PERCENT=50  # メモリの50%をzramに
PRIORITY=100
# サービスを再起動
sudo systemctl restart zramswap
パフォーマンスチューニング
カーネルパラメータの最適化
# /etc/sysctl.confに追加
vm.swappiness=10                    # スワップ使用頻度
vm.vfs_cache_pressure=50            # キャッシュ解放頻度
vm.dirty_background_ratio=5        # バックグラウンド書き込み開始
vm.dirty_ratio=10                   # 書き込み開始閾値
vm.min_free_kbytes=65536           # 最小空きメモリ
# 適用
sudo sysctl -p
I/Oスケジューラの調整
# 現在のスケジューラを確認
cat /sys/block/sda/queue/scheduler
# SSD向けの設定(deadline/noop)
echo deadline | sudo tee /sys/block/sda/queue/scheduler
# HDD向けの設定(cfq)
echo cfq | sudo tee /sys/block/sda/queue/scheduler
トラブルシューティング
スワップが使われすぎる場合
# 原因調査
# 1. メモリ使用量の多いプロセスを特定
ps aux --sort=-%mem | head -10
# 2. スワップ使用プロセスを確認
for file in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file 
done | sort -k 2 -n -r | head -10
# 対策
# swappinessを下げる
sudo sysctl vm.swappiness=1
スワップが有効にならない
# 診断手順
# 1. スワップ状態確認
sudo swapon --show
# 2. dmesgでエラー確認
dmesg | grep -i swap
# 3. 権限確認
ls -l /swapfile
# 4. ファイルシステム確認
df -h /
# 5. 手動で有効化を試みる
sudo swapoff -a
sudo swapon -a
システムが重い(スラッシング)
# スラッシング(過度のスワップ)の確認
vmstat 1 5
# si/soの値が継続的に高い場合はスラッシング
# 対策
# 1. 不要なプロセスを停止
# 2. メモリを増設
# 3. OOM Killerの調整
echo 1000 | sudo tee /proc/[PID]/oom_score_adj
SSDでのスワップ使用
SSD寿命への影響
考慮事項:
- 現代のSSDは耐久性が向上
 - TRIMサポートで寿命延長
 - 適切な設定で影響を最小化
 
# TRIMを有効化(スワップファイルの場合)
sudo fstrim -v /
# SSD向け最適化
# swappinessを低く設定
echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf
# ディスクキャッシュを調整
echo 'vm.dirty_background_ratio=3' | sudo tee -a /etc/sysctl.conf
echo 'vm.dirty_ratio=5' | sudo tee -a /etc/sysctl.conf
監視とメンテナンス
監視スクリプト
#!/bin/bash
# swap_monitor.sh
THRESHOLD=80  # 警告閾値(%)
while true; do
    SWAP_USAGE=$(free | grep Swap | awk '{print ($3/$2)*100}')
    
    if (( $(echo "$SWAP_USAGE > $THRESHOLD" | bc -l) )); then
        echo "警告: スワップ使用率が${SWAP_USAGE}%です"
        # メール通知やログ記録
    fi
    
    sleep 60
done
定期メンテナンス
# スワップのクリア(メモリに余裕がある時)
sudo swapoff -a && sudo swapon -a
# スワップ使用統計のリセット
echo 3 | sudo tee /proc/sys/vm/drop_caches
よくある質問と回答
Q: スワップは必須?RAMが十分あれば不要?
A: 少量でも設定を推奨します。緊急時の保険として機能し、カーネルのメモリ管理を最適化します。最低2-4GBは確保しましょう。
Q: スワップパーティションとファイル、どちらがいい?
A: 性能差はわずかです。柔軟性を重視するならファイル、休止状態を使うならパーティションがおすすめです。
Q: Dockerコンテナでスワップは使える?
A: ホストのスワップを共有します。コンテナ個別の制限は --memory-swap オプションで設定できます。
Q: スワップを完全に無効化してもいい?
A: 可能ですが推奨しません。OOM Killerが頻発し、システムが不安定になる可能性があります。
Q: NVMe SSDでもスワップは遅い?
A: RAMより遅いですが、従来のHDDと比べれば格段に高速です。適度な使用なら問題ありません。
まとめ:適切なスワップ設定で安定運用を
Linuxのスワップ領域は、システムの安定性と柔軟性を提供する重要な機能です。
設定のポイント:
- 用途に応じた適切なサイズを設定
 - swappinessでバランスを調整
 - SSDでは控えめな設定に
 - 定期的な監視でトラブルを予防
 - zswap/zramで効率化
 
推奨構成:
- メモリ8GB以下:スワップ必須(4-8GB)
 - メモリ16GB以上:最小限のスワップ(2-4GB)
 - サーバー:用途に応じて調整
 - SSD環境:swappiness=1-10
 
適切に設定されたスワップは、メモリ不足の緊急時にシステムを守る「保険」として機能します。この記事を参考に、あなたのLinuxシステムに最適なスワップ設定を見つけてください。
快適で安定したLinux環境を構築して、生産性を向上させましょう!
  
  
  
  
              
              
              
              
              

コメント