タイガーラック クリエイティブブログ
2026
April
01

VPSにSwapを追加してOOM対策した話

ある日管理しているサイトが落ちていました。
原因を調べてみると、PostgreSQLがOOMキラーに強制終了させられていました。
Swapファイルを追加したので、その一連を書き残しておきます。

Swapとは

ClaudeにSwapとはなんなのか、ざっくり説明してもらいました。

Swapを一言で言うと、RAMが足りなくなったときの一時退避場所。

RAM = 作業机(速い、容量が小さい)
Swap = 机の横の棚(遅い、容量が大きい)

机がいっぱいになったら、しばらく使っていないものを棚に移して作業スペースを確保する。Swapはその棚にあたる。

# 仕組み
RAMが足りなくなる
Linuxが「しばらく使っていないメモリ」をSwap(ディスク上のファイル)に書き出す
RAMに空きができる
そのデータが必要になったらRAMに読み戻す

# 注意点
SwapはRAMと比べて圧倒的に遅い。RAMがナノ秒単位なのに対し、Swapはディスクを使うためマイクロ〜ミリ秒単位になる。

# そのため:
Swapを頻繁に使っている状態 = メモリ不足のサイン
SwapはあくまでOOMキラーを防ぐ保険
根本的な解決はRAM増設やプロセスの最適化が必要

今回のケースでは、Swap 0の状態ではメモリが少し溢れただけで即OOMキラーが発動していた。2GB追加したことで「溢れても即死しない」状態になった。

# VPSのデフォルト設定について
多くのVPSはデフォルトでSwapが設定されていない。RAM 2GB以下のVPSを運用している場合は、念のため確認しておくことをおすすめする。

まさに今回落ちていたVPSはデフォルト設定のままでしたので、Swapは追加されていませんでした。

OOMキラーにPostgreSQLが殺された

状況確認

サイトが落ちていたので、まずPostgreSQLのクラスター状態を確認しました。

pg_lsclusters
// 結果
Ver Cluster Port  Status
16  main    5432  down

down になっていたので起動しようとしましたが、その前にログを確認するとOOMキラーの痕跡が見つかりました。

sudo grep -i "killed process" /var/log/syslog | tail -20
// 結果
Out of memory: Killed process [PID] (postgres) total-vm:220416kB, ...

原因

メモリ状況を確認すると原因は明白でした。

free -h
// 結果
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       726Mi       633Mi       146Mi       914Mi       1.2Gi
Swap:             0B          0B          0B
RAM 1.9GB、Swap 0B。

Swapが存在しないため、メモリが一時的にひっ迫した瞬間、Linuxカーネルが「このままではシステム全体が死ぬ」と判断し、メモリを多く使っていたPostgreSQLを強制終了。
OOMキラー(Out of Memory Killer)。なるほど。

Swap追加

2GBのSwapファイルを追加しました。

2GBのSwapファイル作成

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

再起動後も有効にする

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

確認

free -h
// 結果
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       739Mi       617Mi       148Mi       919Mi       1.2Gi
Swap:          2.0Gi          0B       2.0Gi

Swap 2GBが有効になった。swapon した時点で即時有効になるため、再起動は不要です。

まとめ

free -h

上記のコマンドを打ってSwap: 0B と表示されていたら、この記事の手順でSwapを追加しておくといいかもしれません。

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.