小さなサーバーは最悪のタイミングでメモリを使い果たします。apt upgrade、Docker ビルド、夜間のバックアップ。スワップがなければ、カーネルの OOM killer がプロセスを一つ選んで強制終了させます。多くの場合、それはデータベースです。スワップファイルは、そうしたピークに逃げ道を与える安価なシートベルトです。コマンドは 5 つだけです。
1. 現状を確認する
swapon --show
free -h
swapon --show が何も表示しなければ、まだスワップはありません。
2. スワップファイルを作る
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
chmod 600 は重要です。スワップには秘密情報を含め、メモリにあったものの断片が入りうるため、読めるのは root だけにすべきです。fallocate が「operation not supported」で失敗する場合は、代わりに dd を使います。
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
3. 永続化する
この手順がないと、再起動でスワップが消えます。
echo '/swapfile none swap sw 0 0' >> /etc/fstab
4. swappiness を調整する
RAM を優先し、スワップは主に逼迫時に使うようカーネルに指示します。
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl --system
5. 確認する
swapon --show
free -h
2 GB のスワップデバイスが表示され、cat /proc/sys/vm/swappiness は 10 を返すはずです。
どれくらいの大きさにするか
- RAM 1〜2 GB のサーバー: スワップ 1〜2 GB。
- 4 GB 以上: 安全網としては 1〜2 GB で十分です。
スワップを「RAM の 2 倍」で決めないでください。サーバーにおけるスワップは短いピークを吸収するためのもので、メモリに収まらない処理を動かすためのものではありません。
スワップが答えにならないとき
数日間、様子を見てください。
vmstat 5
si と so の列は、1 秒あたりにスワップから読み込まれた・スワップへ書き出されたページ数を示します。たまに動きがあるのは正常です。常にゼロ以外の値が続くなら、サーバーのメモリが足りず、すべてがディスクを待っています。その場合の解決策は RAM の増設です。VPS に必要な RAM はどれくらいかをご覧ください。EQVPS なら再インストールなしでより大きなプランに移行でき、データはそのまま残ります。
コメント
まだコメントはありません。最初になりましょう。