マイクラサーバーのメモリ割り当て(-Xmx)— 4GB割り当てるのに4GBのプランでは足りない理由
この記事は生成AIを活用して作成しています。内容は運営者が確認・編集のうえ公開しています。
Minecraftのサーバーを起動するとき、こう書きます。
java -Xms4G -Xmx4G -jar server.jar nogui
-Xmx4G は「Javaが使うメモリの上限を4GBにする」という指定です。ここで多くの人が誤解するのが、この4GBと、借りるサーバーの4GBが同じものだと思ってしまうことです。
同じではありません。4GB割り当てるつもりなら、サーバー自体には5.5GBほど必要です。
-Xmx と -Xms は何を指定しているのか
-Xmx… Javaのヒープ領域の上限-Xms… ヒープ領域の初期サイズ
ヒープはJavaがワールドデータやエンティティを置く場所です。ただしJavaが使うメモリはヒープだけではありません。クラスの情報、スレッドのスタック、JITがコンパイルしたコード、ガベージコレクタ自身の作業領域などが、ヒープの外側に別途必要です。
さらにその外側に、OSそのものが動くための分があります。
つまり構造はこうなっています。
サーバーの搭載メモリ
├── OS(Linuxなど)
├── Javaのヒープ外の領域(Metaspace、スレッド、GC等)
└── Javaのヒープ ← -Xmx で指定するのはここだけ
-Xmx4G はいちばん内側だけを指定しています。搭載メモリが4GBしかないサーバーで4GBのヒープを要求すれば、外側の分が確保できません。
公式ドキュメントは「1〜1.5GB引け」と書いている
Minecraftサーバーの定番であるPaperの公式ドキュメントは、この点を明示しています。搭載メモリから 1000〜1500MB を引いた値を Xmx / Xms に指定するよう案内しており、8GBのホストなら6500MBという具体例を挙げています。
8GB − 6.5GB = 1.5GB。この1.5GBが、上の図でいうOSとヒープ外の分です。
同じドキュメントは Xms と Xmx を同じ値にすることも勧めています。理由は、推奨されているG1GCが最初から全ヒープを与えられたほうが効率よく動くためで、少なく確保して後から広げると無駄が出る、という説明です。
プランを選ぶときに何が起きるか
ここが実務上の問題です。VPSのプランは 2GB / 4GB / 8GB / 16GB といった段で用意されています。1.5GBの上乗せは、たいてい段を1つ押し上げます。
| 割り当てたいヒープ | 実際に必要な搭載メモリ | 選ぶことになるプラン |
|---|---|---|
| 2GB | 3.5GB | 4GB |
| 4GB | 5.5GB | 8GB |
| 6GB | 7.5GB | 8GB |
| 8GB | 9.5GB | 16GB |
料金にすると、当サイト掲載の最安(ロリポップ!for Gamers・12ヶ月契約)で次のようになります。
| 割り当てたいヒープ | 同容量のプランを買った場合 | 実際に必要なプラン |
|---|---|---|
| 2GB | 231円/月 | 462円/月 |
| 4GB | 462円/月 | 890円/月 |
| 8GB | 890円/月 | 1,691円/月 |
ほぼ倍額です。 「4GB割り当てたいから4GBプラン」で契約すると、この差額ぶんの見積もり違いが起きます。
逆に、得をする組み合わせもある
上の表をよく見ると、4GBヒープも6GBヒープも同じ8GBプランになっています。
これは、8GBのプランを契約するならヒープを4GBではなく6GBまで増やせるということです。料金は変わりません。
同様に、16GBプランなら14GB前後まで割り当てられます。プランを決めたら、そこから1.5GBを引いた値を指定するのが、払った料金を使い切る形になります。
割り当て過ぎも問題になる
「じゃあ全部ヒープにすればいい」とはなりません。
搭載メモリぎりぎりまでヒープに割り当てると、OSやヒープ外の領域が圧迫されます。Linuxの場合、メモリが足りなくなるとOOM Killerがプロセスを強制終了させるため、サーバーが理由もなく落ちたように見えます。ログにエラーが残らないこともあり、原因の特定が難しくなります。
「起動はするが、しばらくすると落ちる」という症状で、割り当てを削ったら直った、というのはよくあるパターンです。
なお、時間とともにメモリ使用量が増え続けて落ちる場合は、割り当ての問題ではなくメモリリークの可能性があります。こちらは割り当てを増やしても解決しません(メモリリークの記事で扱っています)。
まとめ
-Xmxが指すのはJavaのヒープだけ。OSとヒープ外の領域は別に要る- 公式ドキュメントは搭載メモリから 1000〜1500MBを引いた値を指定するよう案内している(8GBホストなら6500MB)
-Xmsは-Xmxと同じ値にする- VPSのプランは段になっているため、1.5GBの上乗せでプランが1段上がり、料金はほぼ倍になることが多い
- 逆に、契約したプランから1.5GB引いた値までは割り当ててよい。4GBプランなら2.5GB、8GBプランなら6.5GB
- 搭載メモリぎりぎりまで割り当てると、OOM Killerに落とされる
自分の人数・MOD構成で必要なメモリと、各社の該当プランの料金はMinecraftのページにまとめています。
出典について
Xmx / Xms の指定に関する記述は、PaperMC公式ドキュメントの Aikar's Flags の解説(https://docs.papermc.io/paper/aikars-flags/ )に基づきます。搭載メモリから1000〜1500MBを引くこと、8GBホストで6500MBとする例、Xms と Xmx を揃えることは、いずれも同ドキュメントに記載があります。
料金は各社公式サイトの料金表によるもので、記事公開日時点の値です。必要なヒープ量はワールドの規模・MOD構成・接続人数によって変わるため、上の表は目安として扱ってください。