2026年08月30日 11:30 / - PV

Amazon Linux 2023のインスタンスは、デフォルトではスワップ領域が一切ありません。
free -hで確認すると一目瞭然です。
$ free -h
total used free shared buff/cache available
Mem: 1.8Gi 1.2Gi 120Mi 16Mi 500Mi 420Mi
Swap: 0B 0B 0B ←ゼロ
物理メモリを使い切った瞬間、OOM killerがメモリを一番食っているプロセスを問答無用で殺しに来ます。 MySQLが落ちる、PHPのバッチが落ちる、ウィルススキャンが落ちる...小さいインスタンスの「よく分からない突然死」はだいたいこれです。
実際、当ブログでもClamAVをAmazon Linux 2023に導入した際、メモリ2GBのマシンでスキャンが固まる問題に遭遇しました。
本記事では、スワップファイルを追加して再起動後も維持されるようにする手順をまとめます。
メモリ2GBのインスタンスなら、まずは2GBのスワップを作るのが無難です。
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
128MB × 16 = 2GBです。bs=1M count=2048でも同じですが、ブロックサイズを大きくした方が速く終わります。
スワップファイルにはメモリの中身(=機密情報を含みうる)が書き出されるため、root以外読めないようにします。これをやらないとmkswapが警告を出します。
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
この時点で有効になっています。確認しましょう。
$ swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
$ free -h
total used free shared buff/cache available
Mem: 1.8Gi 1.2Gi 120Mi 16Mi 500Mi 420Mi
Swap: 2.0Gi 0B 2.0Gi ←増えた
swaponはその場限りで、再起動すると消えます。/etc/fstabに1行追加して永続化します。
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
fstabの書き間違いは起動不能の原因になるので、追記後に必ず検証コマンドを通しておきましょう。
sudo mount -a # エラーが出なければOK
swappinessは「どれくらい積極的にスワップを使うか」(0〜100)の設定です。
cat /proc/sys/vm/swappiness # デフォルトは60
スワップはディスクなのでメモリよりずっと遅く、常用するものではなく保険です。Webサーバ/DB用途なら、値を下げて「本当に苦しいときだけ使う」寄りにするのが定石です。
# その場で変更
sudo sysctl vm.swappiness=10
# 永続化
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
スワップに乗った処理は体感できるレベルで遅くなります。「スワップを使い始めたら、本来はスケールアップのサイン」と捉えてください。恒常的にスワップが数百MB使われている状態なら、素直に上のインスタンスタイプへ。
スワップの実体はEBSへのI/Oです。スワップが激しく使われる状況では EBSのバーストバランスも削っていくため、最悪「メモリ不足 + ディスクも遅い」の二重苦になります。繰り返しになりますが、あくまでOOM killer対策の保険として使いましょう。
エフェメラルディスク(インスタンスストア)付きのインスタンスなら、消えてもよいスワップはそちらに置く方がEBSのI/O課金を食いません(再起動時の再作成スクリプトが必要になります)。
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
この5行で、小さいインスタンスの「突然死」リスクはかなり下げられます。ClamAVのような一時的にメモリを大食いするミドルウェアを 動かす前には、特に入れておくのがおすすめです。
この記事が何かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました!
Share Me!