本文へスキップ
← ガイド一覧

メモリが不足しているとき — スワップ(Swap)を追加する

メモリ(RAM)が足りないと、プログラムが突然終了したり(Killed)、サーバーが止まったかのように遅くなったりします。スワップはディスクの一部を非常用のメモリとして使う機能で、メモリが一時的に足りなくなったときに、プログラムが強制終了されるのを防ぎます。

スワップは実際のメモリよりはるかに遅いです。常にメモリが不足しているなら、スワップは一時しのぎにすぎず、メモリの大きいプランに移行するのが根本的な解決策です。新しいサーバーへの移行

1. メモリが不足しているか確認する

free -h
  • Mem:行のavailableの値がほぼ0なら、メモリが不足している状態です。
  • Swap:行がすべて0なら、スワップがない状態です。

プログラムがメモリ不足で強制終了されたかどうかは、次のコマンドで確認できます。

sudo dmesg | grep -i "out of memory"

何か出力された場合は、メモリ不足(OOM)でプログラムが終了したことがあるということです。

2. スワップファイルを作る (Ubuntu・Debian)

以下は2GBのスワップを作る例です。メモリが4GB以下ならメモリと同じサイズ、それより大きければ2〜4GBで十分です。まずdf -hで、ディスクの空き容量が十分にあるか確認してください。

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

free -hをもう一度実行して、Swap:行に2.0Giと表示されれば成功です。

3. 再起動しても維持されるようにする

今の状態では、再起動するとスワップがオフになります。起動時に自動でオンになるように登録します。

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

4. スワップをあまり使わないように調整する (任意)

デフォルトの設定では、メモリが残っていてもスワップをかなり使います。次のように変更すると、メモリが本当に足りないときだけスワップを使います。

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

スワップを削除したい場合

sudo swapoff /swapfile
sudo rm /swapfile

次に、sudo nano /etc/fstabでファイルを開き、/swapfileで始まる行を削除して保存します。

Windowsサーバーは?

Windowsでは「ページング ファイル」という名前でスワップが標準で設定されているため、別途作る必要はありません。メモリが不足している場合は、タスク マネージャー(Ctrl + Shift + Esc)→ プロセスタブで、メモリを多く使っているプログラムを確認してみてください。さらに詳しい点検方法は、サーバーが遅いときの点検を参考にしてください。

解決しない問題がある場合は、Discordのチケットでお問い合わせください。