Linux VPS にスワップ領域を追加する方法(512MB・1GB の小容量プラン向け)

8 分で読めます 7 回閲覧 0
目次

512 MB や 1 GB のクラウドサーバーでは、データベース、PHP-FPM、パッケージ更新が重なるだけで簡単にメモリを使い切ります。するとカーネルの OOM killer がプロセスを停止し、多くの場合 MySQL や MariaDB が犠牲になります。Linux VPS にスワップ領域を追加すれば、ディスク上に退避先ができ、一時的なメモリのピークでサービスが落ちることはなくなります。このガイドでは Debian、Ubuntu、CentOS、Rocky Linux、AlmaLinux でスワップファイルを作成し、永続化して swappiness を調整する方法と、小容量プランでスワップが本当に役立つ場面を解説します。

ステップ1:現在のメモリとスワップを確認

まず RAM とスワップの量、ディスクの空き容量、そしてメモリ不足でカーネルがすでにプロセスを停止していないかを確認します。

free -h
swapon --show          # no output = no swap yet
df -h /                # make sure there is enough free disk space
# Has the kernel already killed processes for lack of memory?
journalctl -k | grep -i -E 'out of memory|killed process' 

swapon --show にデバイスやファイルが表示される場合は、新たに追加せずステップ6 の調整だけで十分なこともあります。

ステップ2:適切なスワップサイズを決める

VPS におけるスワップは安全バッファであり、RAM の代わりにはなりません。一般的な小容量プランの目安は次のとおりです。

プランのメモリ推奨スワップ備考
512 MB1 GB強く推奨
1 GB1 GB - 2 GBDB やコントロールパネル利用時に推奨
2 GB1 GB安全バッファとして
4 GB 以上1 GB - 2 GB またはなし緊急用バッファのみ

スワップファイルはサーバーの SSD 容量を使うため、ステップ1 で確認した空き容量を踏まえてサイズを決めてください。

ステップ3:fallocate または dd でスワップファイルを作成

fallocate は一瞬で領域を確保します。ファイルシステムによってはスワップ用に対応していないため、その場合は dd でブロックごとに書き込みます。時間はかかりますが確実です。ファイルは root のみ読み書きできるようにします。

# Fast method (ext4, XFS)
fallocate -l 1G /swapfile

# If fallocate fails, or swapon later reports "file has holes", use dd instead
rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress

chmod 600 /swapfile
ls -lh /swapfile
Btrfs ではスワップファイルに特別な扱い(コピーオンライトの無効化)が必要なため、専用の手順を使ってください。コンテナ型の仮想化ではスワップをホスト側が管理しており、swapon が「Operation not permitted」で失敗することがあります。

ステップ4:スワップを初期化して有効化(mkswap と swapon)

mkswap がスワップの署名を書き込み、swapon で再起動なしにすぐ有効になります。

mkswap /swapfile
swapon /swapfile

swapon --show
free -h

ステップ5:/etc/fstab に登録してスワップを永続化

fstab に書かないと、再起動でスワップは消えます。ファイルをバックアップして 1 行追加し、いったんスワップを無効にしてから swapon -a で有効化してテストします。これは起動時と同じように fstab を読み込みます。

cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# Test the fstab entry without rebooting
swapoff /swapfile
swapon -a
swapon --show

ステップ6:VPS 向けに swappiness を調整

vm.swappiness は、カーネルがメモリページをどれだけ積極的にスワップへ移すかを決めます。デフォルトの 60 はデスクトップ向けです。サーバーでは 10 にすると、よく使うデータを RAM に残し、本当に逼迫したときだけスワップを使います。vfs_cache_pressure を下げると、ファイルシステムのメタデータキャッシュが少し長く保持されます。

cat /proc/sys/vm/swappiness        # often 60 by default

# Apply now
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50

# Keep after reboot
cat > /etc/sysctl.d/99-swap.conf <<'EOF'
vm.swappiness=10
vm.vfs_cache_pressure=50
EOF
sysctl --system

ステップ7:512 MB~1 GB プランでスワップが役立つ場面と限界

スワップが効果を発揮するのは一時的なピークです。apt upgrade や dnf update の実行、ソフトウェアのコンパイル、Composer や npm のインストール、夜間バックアップ、データベースが一時的にバッファを増やす場面などです。一方、常にプランを超えるメモリを必要とする負荷は解決できません。実際にスワップが頻発していないか確認しましょう。

# Watch the si (swap in) and so (swap out) columns for 10 seconds
vmstat 1 10

si と so がたまに 0 以外になる程度なら問題ありません。常に高い値なら、スラッシングが起きていて全体が極端に遅くなります。その場合はメモリ使用量を減らす(PHP-FPM のワーカー数やデータベースのバッファを減らす)か、VPS の RAM を増やしてください。JUSTG のクラウドサーバーは、クライアントエリアまたはチケットから RAM を追加できます。

ステップ8:スワップファイルのサイズ変更・削除

# Resize to 2 GB or remove swap
swapoff /swapfile
rm -f /swapfile
# To remove completely, also delete the fstab line:
sed -i '\|^/swapfile |d' /etc/fstab
# To resize, repeat Step 3 and Step 4 with the new size (fstab line stays)

よくある質問

スワップで SSD が消耗しませんか?

swappiness を 10 にしてピーク時だけ使うなら、書き込み量はわずかです。常に大量のスワップが発生するなら、必要なのはスワップではなく RAM です。

スワップファイルはスワップパーティションより遅いですか?

現在のカーネルでは差はほぼありません。VPS ではファイルの方が作成・変更・削除が簡単なため、本ガイドではスワップファイルを使っています。

スワップを追加しても MySQL が停止されます。

journalctl -k | grep -i oom と free -h を確認してください。スワップも使い切っている場合は、innodb_buffer_pool_size や Web サーバーのワーカー数を減らすか、プランの RAM を増やしましょう。

サーバーのスワップやメモリについてお困りの場合は、https://www.justg.com/submitticket.php からチケットを送信してください。JUSTG テクニカルサポートが対応いたします。

この回答は役に立ちましたか?

関連チュートリアル

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linuxサーバー Linux SSH 鍵認証の設定方法:ed25519 鍵でログインしパスワード認証を無効化 ed25519 鍵で Linux VPS に SSH 鍵認証を設定し、authorized_keys の権限を整えてパスワード認証を安全に無効化する手順。 10 分で読めます 7 チュートリアルを読む root@vps: ~ $ openssl rand -base64 18$ passwd root$ ss -tlnp | grep ':2222' || echo "port 2222 is… Linuxサーバー Linux VPS で SSH ポート番号と root パスワードを安全に変更する方法 Linux の SSH ポート変更と root パスワード変更を、SELinux・ファイアウォール・Ubuntu ssh.socket・VNC 復旧まで解説。 12 分で読めます 6 チュートリアルを読む root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linuxサーバー Linux ファイアウォール設定:VPS で UFW と firewalld を使う方法(IPv6 対応) UFW / firewalld で Linux ファイアウォールを設定。SSH 優先許可、Web ポート、送信元 IP 制限、IPv6、締め出し時の復旧まで。 12 分で読めます 7 チュートリアルを読む root@vps: ~ $ df -hT$ df -i$ du -xh --max-depth=1 / 2>/dev/null | sort -h … Linuxサーバー Linux のディスク容量不足:VPS で空き容量を調べて解放する方法 Linux のディスクがいっぱいなら df・du・ncdu で原因を特定し、ジャーナル・キャッシュ・Docker・ログ・削除済みファイルを解放。 11 分で読めます 7 チュートリアルを読む