LoginSignup
7
5

MinecraftServerをマルチスレッドで動作させる。

Last updated at Posted at 2023-04-08

はじめに

 最近、自分で建てているサーバが発展してきてSpigotでは重たくなってきたためネットでMCserverのマルチスレッドについて調べてみたら、PaperMCの派生として「Folia」があったのでこちらのインストールの仕方について説明します。

2023/12/26 
現在この記事に記したコマンドで、1.20.2のバージョンをダウンロードできます。

Foliaとは

 Folia groups nearby loaded chunks to form an "independent region.と公式サイトに説明されています。要するに、いくつかのチャンクを1つのグループにしてそのたくさんのグループを並列で処理することでマルチスレッドでの処理を実現してるということらしいです。また、Foliaは200~300人以上の大規模サーバで効果を発揮するそうです。もちろん少人数でも効果はあります。また、開発されているバージョンは1.19.4からです。1.19.4未満のバージョンは開発されていないです。

余談 

バニラサーバやSpigotサーバの処理は主にシングルスレッドで処理しているため、サーバの動作を良好にするにはCPUの動作周波数が重要となってきます。なのでXeonなどコア数をたくさん積んでいるCPUでは1コアあたりの動作周波数が低いのでコアがたくさんあってもサーバに負荷がかかると、どうしても重たくなってしまいます。

FoliaとSpigotの性能の違い

同じ動作状況・負荷の環境で計測した結果です。

1枚目の画像がFolia
image.png
2枚目の画像はSpigot
image.png
MSPTを見ると、3倍の差がありFoliaでは負荷が分散されています。
タスクマネージャーでCPUの使用状況をみるとしっかりと、すべてのコアで処理が分散されていることが確認できます。
image.png

テスト動作環境

  • Windows11 pro ※Linuxでも動作します。
  • mem:80G and 128GB
  • CPU:Xeon E5-2637v3 *2 and Xeon E5-2690v4 *2
  • git for windows  重要!
    gitをインストールしていない方は下記のURLからダウンロードしてください。

Foliaのダウンロード

  • まず適当にフォルダを作成します。
  • 次に作成したフォルダを開き、右クリックを押し、ターミナルで開くを選択します。
     image.png
  • ターミナルで下記のコードを実行します。
     git clone https://github.com/PaperMC/Folia.git
    
      これを実行することでFoliaをダウンロードします。
      image.png
  • Foliaのダウンロードが終わったら、ダウンロードしたフォルダに移動します。
     cd Folia
    
  • 次に、パッチを適用します。
    ./gradlew applyPatches
    
    ※エラーが出たらこれを実行。
    gradlew.bat applyPatches
    

   image.png

※初めてgitを使う人は以下のようなエラーが出る場合があります。

image.png

  • githubのアカウントを作成します。

  • 次にgithubのアカウントをコマンドで登録します。
     git config --global user.email "you@example.com(登録したメールアドレス)" 
    
     git config --global user.name "Your Name(アカウント名)"
    
  • 登録が完了したら、もう一度パッチを適用してください。

  • パッチの適用が完了したらサーバを起動するjarファイルを作成します。

    ./gradlew createReobfBundlerJar
    
  • jarファイルの作成が完了したら、下記のパスにフォルダが生成されます。

    ~\Folia\build\libs\folia-bundler-1.19.4-R0.1-SNAPSHOT-reobf.jar
    
  • jarファイルを適当なフォルダに移動します。
     例えば、デスクトップにserverというフォルダを作り、そこにjarファイルを移動させます。
    image.png

  • 移動した先でjarファイルを実行します。

  • 実行するとフォルダとファイルが生成されます。そこでeula.txtというファイルを開きeula=Falseeula=Trueに変えます。
    image.png

  • 次にサーバを起動するbatファイルを作成します。server.txtというファイルを作成します。txtファイルに下記のコマンドを書き込み保存します。
    image.png

 java -Xmx4096M -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:MaxGCPauseMillis=130 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1ConcRSHotCardLimit=16 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:+UseTransparentHugePages -jar folia-bundler-1.19.4-R0.1-SNAPSHOT-reobf.jar nogui

※使用しているOSによっては、-XX:+UseTransparentHugePagesが使えないので各自で削除してください。(Windowsの場合は消す
  また、各自サーバに割り当てるメモリを変更してください。

image.png

  • server.txtをserver.batに変更します。
     image.png image.png 

※ファイルの名前に拡張子が表示されていない場合は下の画像のようにチェックをつけてください。
  image.png
  image.png

  • 作成したbatファイルを開いてください。
     ※ここでコマンドプロンプトがすぐに落ちてしまう場合は、batファイルの中身に記入されている、-XX:+UseTransparentHugePagesを削除してください。

これでサーバ起動の方法についての説明は以上です。

プラグインについて。

現状Foilaでは、PaperMCやSpigotMCで使用されるプラグインについては、プラグインの開発者がマルチスレッドに対応させなければFoilaでは使えないためほとんどのプラグインが使用できません。海外の方が現状で使えるプラグインをまとめているテキストがあったためそちらを参照してください。

おすすめのプラグイン

参考文献

以下のサイトを参考に作成しました。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5