ゲームサーバーがある日突然落ちていて、ログにも理由が見当たらない。その場合、メモリ不足による強制終了を疑ってください。Linuxはメモリを使い切ると、いちばん多く使っているプロセスを選んで強制的に終了させます。ゲームサーバーは決まってその筆頭です。
swap(仮想メモリ)を用意しておくと、この強制終了を避けやすくなります。ただし、swapはメモリの代わりにはなりません。足りないメモリをswapで補って安いプランで動かす、という使い方は失敗します。
この記事では、swapを「落ちないための保険」として置く手順と、その限界、プラン選びの考え方を整理します。
なぜ落ちるのか
Linuxにはメモリが枯渇したときに動く仕組みがあり、メモリ使用量の大きいプロセスから終了させます。ゲームサーバーはメモリを最も多く使うため、真っ先に選ばれます。
心当たりがあるときは、まずログを確認してください。
sudo dmesg | grep -i -E 'out of memory|killed process'ここに記録が出ていれば、落ちた原因はメモリ不足です。アプリ側のログには何も残らないことが多いため、サーバーのログを確認する必要があります。
swapにできること・できないこと
swapはディスクの一部をメモリの代わりに使う仕組みです。
| できること | できないこと |
|---|---|
| 一時的なメモリ消費の増加分を吸収する(強制終了の回避) | メモリ不足の根本的な解決 |
| 長時間使われていないデータを退避してメモリを空ける | 必要メモリの半分で快適に動かす |
| 起動直後やワールド生成時の一時的な急増をしのぐ | 処理速度を上げる |
ディスクはメモリより桁違いに遅いため、実際にswapを使い始めるとゲームの動作はカクつきます。
つまりswapは、普段は使われず、いざというときだけ働く保険として置くものです。常時swapを使っている状態は、メモリが足りていないという警告だと考えてください。
swapを設定する
現在の状態を確認する
free -h
swapon --showSwap:の行が0だったり、swapon --showが何も出さない場合は未設定です。
swapファイルを作る
領域の作成にはfallocateを使います。mkswap、swaponでswapを有効化します。
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfilechmod 600は必須です。swapの中身は他の利用者から読めてはいけません。
うまくいくと次のような表示が出ます(サイズの数字は作成した容量に応じて変わります)。
Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
no label, UUID=891bc055-9bd4-4462-8fd7-9e0b6da7222c
ファイルシステムによっては、fallocateで作った領域をmkswapが拒否します。その場合はddで作り直してください。
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress再起動後も有効にする
上記の手順で設定したswap領域は再起動すると消えてしまうので、/etc/fstabへ次の1行を足します。
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab確認する
free -h
swapon --showSwap:に容量が出ていれば設定完了です。
どれくらいの容量にするか
保険として置くなら、メモリと同じ容量から2倍が目安です。ディスクを圧迫しない範囲で決めてください。
swappinessでswapの使われやすさを変える
vm.swappinessは、カーネルがどれくらい積極的にswapを使うかの指標です。カーネルの公式ドキュメントによれば0から200の値を取り、既定値は60とされています。
値を小さくするとswapよりページキャッシュが優先され、swapへの退避が起きにくくなります。ゲームサーバーのように応答速度が大切な用途では、既定より小さめにして「本当に苦しいときだけ使う」運用が向きます。
# 現在の値
cat /proc/sys/vm/swappiness
# 一時的に変更(再起動で戻る)
sudo sysctl vm.swappiness=10
# 恒久的に設定
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf0にするとメモリが逼迫するまでswapを使わなくなりますが、保険として置いた意味が薄れるため、10前後から試すことをおすすめします。
VPS選びの考え方
あくまでswapは保険であって、メモリを減らす口実にはなりませんが、ディスクの書き込み速度が高速な構成を採用しているVPSの場合、瞬間的なメモリ不足に陥った場合も性能が低下しにくいです。
そのため、メモリ消費の激しい重量級のゲームを構築する場合はシンVPS
のようなメモリ単価が安く、高速なNVMe SSDを採用しているVPSをお勧めします。
よくある質問
swapを大きくすれば安いプランでも問題ありませんか
安いプランで動作させるのは現実的といえません。実際にswapが発生すると動作が極端に重くなるため、一時的なメモリ消費のスパイクを吸収する程度にとどめておく方が良いです。
swapを設定するとディスクの寿命が縮みませんか
頻繁にswapが発生するとディスクの寿命を縮めることになるので、頻繁なswapが発生する状況における自宅サーバでの設定は推奨しません。(借り物のVPSであればいいという話ではないですが)
すでに落ちた原因がメモリ不足か確かめたいです
sudo dmesg | grep -i 'out of memory'で記録を確認してください。再起動でログが流れる環境では、journalctl -k -b -1で前回起動分をさかのぼれます。
swapを消したくなったら
sudo swapoff /swapfileで無効化し、/etc/fstabの行を削除してからファイルを消します。先にfstabを直さないと、次回起動でエラーになります。
まとめ
- メモリを使い切るとOSがゲームサーバーを強制終了する。原因は
dmesgで確認できる - swapは保険であってメモリの代わりではない。常時使っている状態はメモリ不足の警告
- 手順は「fallocateで作成 → chmod 600 → mkswap → swapon → fstabへ追記」
- 容量はメモリと同じ〜2倍が目安。
vm.swappinessは既定60、応答重視なら10前後 - メモリはプランで確保し、swapは保険。単価とディスク速度でVPSを選ぶ