サーバーが重い原因はいろいろあるが、それを解消するために.bat
ファイルに引数を色々書いてサーバーを起動させる…というテクニックがある。ググればいろんなサイトがいろんな設定を紹介してくれているが、実際何をするとサーバーが軽くなるのか、様々なパラメータを検証した。
※細かい話はいいから結論だけ知りたい人は一番下までスクロール
##テストしたサーバーのスペック
minecraft forge server 1.12.2-2855
MOD各種(工業系とか魔術系とか)70個ぐらい
シングルプレイに安定8GB必要な感じの構成。
#サーバーに必要なのはメモリ?CPU?グラボ?
結論から言うと、CPU>メモリ>>>>>グラボではないかなと。
###CPU
特にクロック(周波数)が重要で、実はコア数はサーバーにはあんまり関係がない。
クロックというのはざっくり言って1秒間に何回の演算処理ができるかという数値で、だいたい3GHzが安定して出ていればサーバーとしては問題ないと思われる。
コア数が関係ないというのは、マインクラフトのサーバーはシングルコアで動かすのが実際最適なため。加速させようとして並列化するとかえって遅くなったりする。つまり、
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing
-XX:ParallelGCThreads=12 -XX:+AggressiveOpts
なんかよく紹介されているコレは不要だった。
ただし、サーバーとクライアントを同じPCで動かす場合、-server
を指定しておかないと、両方を同じコアで動かそうとして重くなってしまう(らしい)ので、どんなにひどくても2コアはあった方がいいと思われる。もっとも今の時代なら大抵のCPUはその点問題ないとは思うが。
###メモリ
シングルプレイが満足にできるスペックであれば、メモリの要件は満たしていると言える。サーバーがカクつかないように、シングルプレイで割り当てていたのと同程度の割り当てをしておきたい。MOD山盛りのサーバーだとかなり割り当てを増やさないといけなくなるが、逆にバニラサーバーで遊ぶ分には2GBもあれば足りる。
サーバーとクライアントを同じPCで動かす場合、例えば16GB積みのPCでサーバー8GB、クライアント8GBのような割り当てをしてしまうとOutOfMemoryError
待ったなしなので、少しでいいから余裕を持たせよう。メモリの割り当ては2の累乗数であるべきとよく言われるが、実際例えばクライアントのメモリ割り当てを6GBとかにしても普通に動く。
###GPU(グラボ)
画面描画のお話なので、サーバーには関係がない。
##Java
###JREかJDKか
走らせるにはJREが必要だが、JDKにはJREが同梱されているため、どっちでも動く。
###64bin版か32bit版か
64bit版推奨。32bit版だとメモリの割り当てで不具合をきたすことがある。両方インストールしている場合は32bit版をアンインストールする。
##その他よく紹介されている引数の要不要について
###@echo off
要らない。というか、どうでもいい。
.batファイルの中身をコマンドプロンプトに表示させるかどうかというそれだけの話なので、あってもなくても動作に影響はない。書きたければ書く、ぐらい。
###pause
これもどうでもいい。
これを書くと最後コマンドプロンプトの画面が自動で消えない、というだけ。サーバーの動作には影響がない。
###nogui
これを書いた方が軽いらしい。
書かないとコマンドプロンプトとマイクラサーバーのGUI画面が出る。これを書くとコマンドプロンプトのみになる。後者の方がやや早い。
情報が錯綜しているポイントだが、**ハイフンは不要。**ハイフン入れると普通にGUIが表示される。
#結論
java -server -Xmx8G -Xms8G -jar server.jar nogui
pause
これだけで良かった。
Simple is best.