メモリが不足しているとき — スワップ(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)→ プロセスタブで、メモリを多く使っているプログラムを確認してみてください。さらに詳しい点検方法は、サーバーが遅いときの点検を参考にしてください。