ゲームサーバーのリソース最適化 on Ubuntu — CPU/RAM/ネットワーク調整

ゲームサーバー




Ubuntu でゲームサーバーを立てたとき、「なんか重い」「接続が不安定」という状態が続くことがあります。大抵の原因は Ubuntu のデフォルト設定がゲームサーバー向けに調整されていないことです。

この記事では、Ubuntu 24.04 のデフォルト値を実際に確認したうえで、TCP チューニング・RAM 管理・ファイルディスクリプタの上限を実環境に合わせて調整する手順をまとめます。Minecraft・Factorio・Valheim 等の専用サーバーを想定しています。

本記事で紹介するコマンドと数値は Ubuntu 24.04 の Docker 公式イメージで実際に確認したものです(2026-06-21)。

この記事のポイント

  • Ubuntu 24.04 のデフォルト vm.swappiness=60 はゲームサーバーには高すぎる。10 に下げて RAM 優先にする
  • TCP 接続の滞留(tcp_fin_timeouttcp_keepalive_time)をゲームサーバー向けに短縮する
  • デフォルトの open files 上限 1024 は同時接続 100 人超えると枯渇する。65535 に拡張する
  • 変更はすべて /etc/sysctl.d//etc/security/limits.conf に書き、再起動後も有効にする

前提環境と実測環境

この記事で紹介する設定は以下の環境で検証しました。

  • OS: Ubuntu 24.04 LTS(docker run –rm ubuntu:24.04 で確認)
  • 検証日: 2026-06-21
  • 想定ゲームサーバー: Minecraft Java Edition / Factorio / Valheim(TCPとUDP両用)

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。22.04 でも基本的に同じですが、sysctl の一部パラメータ名やデフォルト値が異なる場合があります。変更前に sysctl -a で自分の環境のデフォルト値を確認してください。

デフォルト値を確認する(変更前に必ず確認)

チューニングの前に、まず Ubuntu 24.04 のデフォルト値を確認します。実際に Ubuntu:24.04 コンテナで sysctl コマンドを実行して取得した値がこちらです。

Ubuntu 24.04 sysctl デフォルト値の確認(実行例)
Ubuntu 24.04 sysctl デフォルト値の確認(実行例)



ubuntu@game-server: ~
$ sysctl vm.swappiness vm.dirty_background_ratio net.ipv4.tcp_fin_timeout net.ipv4.tcp_keepalive_time net.core.somaxconn net.ipv4.tcp_congestion_control
vm.swappiness = 60
vm.dirty_background_ratio = 10
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_keepalive_time = 7200
net.core.somaxconn = 4096
net.ipv4.tcp_congestion_control = cubic

tcp_keepalive_time=7200 は「接続が途切れてから 2 時間放置してもゾンビ接続を保持する」という意味です。ゲームサーバーでは 5 分(300 秒)で十分です。

sysctl チューニング(ネットワーク・RAM)

実測したデフォルト値と、ゲームサーバーへの推奨値をまとめた表がこちらです。

sysctl デフォルト vs 推奨値(実測比較表)
sysctl デフォルト vs 推奨値(実測比較表)

手順1:設定ファイルを作成する

/etc/sysctl.d/99-gameserver.conf というファイルに設定を書きます。既存の sysctl.conf は触らず、専用ファイルに分離しておくと管理が楽です。




ubuntu@game-server: ~
$ sudo tee /etc/sysctl.d/99-gameserver.conf << ‘EOF’
# ゲームサーバー向け sysctl チューニング(Ubuntu 24.04)
vm.swappiness = 10
vm.dirty_background_ratio = 5
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
EOF
$ sudo sysctl -p /etc/sysctl.d/99-gameserver.conf
vm.swappiness = 10
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.core.somaxconn = 65535

手順2:BBR 輻輳制御を有効にする(Ubuntu 24.04 推奨)

Ubuntu 24.04 のデフォルト TCP 輻輳制御は cubic です。Google が開発した BBR に切り替えると、高遅延環境でのスループットが改善します。特に海外プレイヤーが多いサーバーで効果があります。




ubuntu@game-server: ~
$ sudo modprobe tcp_bbr
$ echo “tcp_bbr” | sudo tee -a /etc/modules-load.d/modules.conf
tcp_bbr
$ echo “net.ipv4.tcp_congestion_control = bbr” | sudo tee -a /etc/sysctl.d/99-gameserver.conf
$ sudo sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

ファイルディスクリプタ(open files)上限の拡張

Ubuntu 24.04 の open files デフォルト上限は 1024 です。これは ulimit -a コマンドで確認できます。

Ubuntu 24.04 ulimit デフォルト値(実測)
Ubuntu 24.04 ulimit デフォルト値(実測)



ubuntu@game-server: ~
$ ulimit -n
1024

ゲームサーバーはプレイヤー接続ごとにソケットを 1〜数個使います。100 人接続なら最低でも数百のファイルディスクリプタが必要です。デフォルトの 1024 は余裕がなく、プレイヤーが増えると接続が弾かれます。

手順3:limits.conf で上限を拡張する




ubuntu@game-server: ~
$ sudo tee -a /etc/security/limits.conf << ‘EOF’
# ゲームサーバー向け ulimit 拡張
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF
$ grep nofile /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

ログアウトして再ログインすると反映されます。ulimit -n65535 に変わっていれば成功です。

systemd サービスで起動する場合の注意

limits.conf の変更は PAM セッション経由でのみ有効です。systemd サービスとして起動するゲームサーバーには別途 LimitNOFILE=65535 を service ファイルに書く必要があります。

CPU パフォーマンス実測(sysbench)

Ubuntu 24.04 での sysbench CPU ベンチ結果です。ゲームサーバーの計算負荷の目安として参考にしてください。

sysbench CPU 実測ベンチ(Ubuntu 24.04, 2スレッド)
sysbench CPU 実測ベンチ(Ubuntu 24.04, 2スレッド)

2 スレッド・10 秒で平均 13,786 events/sec(最小 13,783、最大 13,788)と非常に安定した結果でした。実際の VPS では環境により大きく異なります。Minecraft Java Edition の場合、シングルスレッドのコア性能がボトルネックになるため、スレッド数より CPU の単一コア性能が重要です。

ディスク I/O の確認(マップ読み込み速度)

ゲームサーバーはプレイヤーが移動するたびにチャンクデータをディスクから読み書きします。特に Minecraft は頻繁なディスクアクセスが発生します。

dd ディスクI/O 実測(Ubuntu 24.04 Docker環境)
dd ディスクI/O 実測(Ubuntu 24.04 Docker環境)

Ubuntu 24.04 コンテナ(ホスト: AMD Ryzen 9 9950X / tmpfs)で dd を実行した結果、書き込み 6.1 GB/s、読み込み 23.0 GB/s でした。これは tmpfs(RAM ディスク)上の計測なので実際の VPS の SSD より高速です。本番 VPS の SSD では 500〜2,000 MB/s 程度が目安です。




ubuntu@game-server: ~
$ dd if=/dev/zero of=/tmp/testfile bs=1M count=256 2>&1
256+0 records in
256+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 0.0437 s, 6.1 GB/s
$ dd if=/tmp/testfile of=/dev/null bs=1M count=256 2>&1
256435456 bytes (268 MB, 256 MiB) copied, 0.0117 s, 23.0 GB/s

チューニング設定ファイルのまとめ

これまでの設定を一枚にまとめると以下のようになります。VPS に新しくゲームサーバーを立てたとき、このファイルを置いて sysctl -p するだけで済みます。




/etc/sysctl.d/99-gameserver.conf
# ゲームサーバー向け sysctl(Ubuntu 24.04 / 2026-06-21 確認済み)
# — RAM —
vm.swappiness = 10
vm.dirty_background_ratio = 5
# — TCP 接続管理 —
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
# — 接続キューと輻輳制御 —
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_congestion_control = bbr
# — TCP バッファ —
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

VPS 選びも性能に直結する

チューニングの効果は VPS のベースライン性能に依存します。どれだけ sysctl を調整しても、ネットワーク帯域やCPU性能が不足していれば改善には限界があります。

VPS 最安プラン vCPU / RAM 東京リージョン ゲームサーバー用途
Vultr $5/月〜 1 / 1GB あり 小規模(〜10人)なら十分
DigitalOcean $6/月〜 1 / 1GB なし(最寄: シンガポール) 東京不可・遅延注意
Linode (Akamai) $5/月〜 1 / 1GB なし(最寄: 大阪) 大阪なら遅延は許容範囲
ConoHa VPS 880円/月〜 1 / 1GB あり(東京・大阪) 日本語サポートあり

Minecraft などの場合、プレイヤー 10〜20 人以上なら最低 2GB RAM、できれば 4GB 以上のプランを選ぶのが現実的です。

まとめ

Ubuntu 24.04 のデフォルト設定はゲームサーバー向けに最適化されていません。今回実測で確認したデフォルト値(swappiness=60tcp_keepalive_time=7200open files=1024)はいずれも変更すべき値でした。

  • vm.swappiness を 60 → 10 に下げて RAM を優先する
  • tcp_keepalive_time を 7200 → 300 秒に短縮してゾンビ接続を早期解放する
  • net.core.somaxconn を 4096 → 65535 に拡張して接続キューを増やす
  • open files を 1024 → 65535 に拡張して接続枯渇を防ぐ
  • TCP 輻輳制御を cubicbbr に切り替える(特に高遅延環境)

設定は /etc/sysctl.d/99-gameserver.conf に書いて sysctl -p するだけです。再起動後も自動適用されます。

VPS 選びに迷ったら、国内に東京リージョンを持つ Vultr か ConoHa VPS から始めるのが近道です。

コメント

タイトルとURLをコピーしました