Skip to content
ブログに戻る
Folia: リージョンマルチスレッドでMinecraftサーバーの性能が劇的に向上する理由と実装方法

Folia: リージョンマルチスレッドでMinecraftサーバーの性能が劇的に向上する理由と実装方法

ice
ice
@ice
Updated
1 閲覧
TL;DR:Foliaは大規模Minecraftサーバー向けのPaperフォークで、複数のCPUコアに処理を分散させます。200人以上のプレイヤーがいる広大な世界を舞台にしたコミュニティに対応しており、プラグイン互換性とのトレードオフを覚悟すれば、真の性能向上が期待できます。
<! - gh-polish-start - >
GitHub - Minecraftコミュニティプロジェクト

Folia (PaperMC/Folia)

Paperのフォーク。デディケーテッドサーバーにリージョン化マルチスレッド機能を追加します。

GitHubでスター ↗
⭐ 4,228 stars💻 Shell📄 GPL-3.0
<! - gh-polish-end - >

大規模Minecraftサーバーを運営していて、新しいチャンクを探索するたびにTPSが急落したり、ピーク時のプレイヤー数に達するとサーバーが重くなる経験はありませんか。Foliaはそんな悩みの解決策になるかもしれません。このPaperベースのフォークは、世界を独立したリージョンに分割し、各リージョンを独自のスレッドで実行することで、Minecraftサーバーの計算処理を根本的に再設計しました。単一のメインスレッドがすべての処理に対応しようとするのではなく、Foliaなら複数のCPUコアが本当の意味で並列処理できるようになります。

Foliaとは何か

Foliaはモッドではなく、プラグインでもありません。Paperサーバーをゼロから書き直したもので、メインスレッドの概念を完全に廃止しています。代わりに、近い場所にあるチャンク群を「リージョン」にまとめ、各リージョンはスレッドプール内の独自のティックループで動作します。世界の異なる部分にそれぞれ独立した処理エンジンを与えるようなものです。

このアーキテクチャの意味は大きいです。サーバーのスケーラビリティ方法を根本的に変えるからです。

Paperは単一スレッド設計のままで何百万人ものプレイヤーを抱えるサーバーをうまく処理できていますが、次のレベルのスケール - 広大な世界に散らばった数百人のプレイヤー - に到達するとボトルネックが生じます。Foliaは単一スレッドから搾り出す方法を探るのではなく、問題そのものを根本的に変えます。


Foliaが活躍する場面

大規模で広がりのあるサーバーに最適です。プレイヤーが浮島に散らばったスカイブロックネットワーク、巨大なサバイバルワールド、分散したダンジョンを持つカスタムRPGサーバー - Foliaが本領を発揮するのはこのような場面です。プレイヤーがスポーン地点に集中している場合は、同じレベルのパフォーマンス向上は期待できません。ですが200人以上のSMPで、プレイヤーが異なるエリアで探索しているなら、効果は圧倒的です。

ただし、正直に言っておくべき点があります。これはドロップイン交換ではありません。

プラグインはFoliaのマルチスレッド環境向けに書き直す必要があります。これが本当のコストです。ですが、このスケールで検討するなら、プラグインエコシステムはカスタムビルドされているはずです。標準的なPaperプラグインでメインスレッドを前提としているものは、Foliaの下ではすぐに壊れます。

ただ、見返りは本物です。適切な設定なら、CPUコア数に応じてスケールする真のパフォーマンス改善が得られます。これは標準Paperでは実現不可能です。


インストールと基本セットアップ

まずはPaperMCダウンロードページから最新ビルドを取得してください。2026年時点で、Foliaは最新のMinecraftバージョン(1.20.4以降)に対応しています。jarファイルをサーバーディレクトリにダウンロードしてください:

<! - gh-code-start - >
bash
wget https://api.papermc.io/v2/projects/folia/versions/latest/builds/latest/downloads/folia-latest.jar
mv folia-latest.jar folia.jar
<! - gh-code-end - >

次に、eula.txtファイルでEULAに同意してください。サーバーを一度起動してコンフィグファイルを生成します:

<! - gh-code-start - >
bash
java -Xmx30G -Xms30G -jar folia.jar nogui
<! - gh-code-end - >

一度停止します(folia.ymlコンフィグが作成されます)。そこからが本当の作業になります。スレッド設定です。これは単に「スレッド数を増やして終わり」ではありません。PaperMCの公式ドキュメントでは、本番環境に移行する前にワールドをあらかじめ生成することを推奨しています。これによりチャンク読み込みのオーバーヘッドが大幅に削減されます。


スレッド設定 - 本当の課題

ここで多くの人が混乱します。folia.ymlには`threaded-regions.threads`設定があります。単にマックスにしないでください。プロジェクト自体の推奨ガイドラインは、200-300人プレイヤーごとにNetty IO用に約4スレッド、チャンクシステムIO用に約3スレッド、事前生成されたチャンクシステムワーカー用に約2スレッド、そして残りのコア数の80%までをティックスレッドに充当する、というものです。

500人プレイヤーを対応させる32コアマシンなら、おおよそこのように配分します:

  • Netty IO: 8スレッド
  • チャンクシステムIO: 6スレッド
  • チャンクシステムワーカー: 4スレッド
  • ティックスレッド: 残りのコア数、80%上限まで(約10スレッド)

100%配分に留めないのは、プラグインと予期しないバックグラウンドタスクが独自スレッドを生成してサーバーをクラッシュさせるからです。80%の上限は本当に大切な安全限界です。

それでも、これは出発点です。実際の負荷下でのスレッド使用状況を監視し、調整してください。folia.ymlファイルにはすべてのオプションについて詳しいコメントが記載されています。


ちゃんと動作する主な機能

リージョン分離。 各リージョンは20 TPSで独立してティックします。あるリージョンのラグスパイクが他のリージョンに波及しません。ダンジョンシステムの最適化が不十分でも、スポーン地点のパフォーマンスは落ちません。

適切なスレッドスケーリング。 Paperのプラグインスレッドプール方式(ティック処理でまだボトルネックが発生する)と異なり、Foliaのリージョンはティックロジックを並列実行します。より多くのコアが本当にティック処理の増加に繋がります。スケーリングは直線的ではありませんが、現実のものです。

非同期チャンク読み込み。 チャンクI/Oはリージョンスレッドの外で実行されます。シングルスレッドサーバーが経験するストレージ読み込みスパイク時のランダムフリーズはありません。

他にも、ネイティブなサーバーサイドチャンク最適化、事前生成チャンクのキャッシング、リージョンごとの設定可能なメモリ制限があります。正直に言えば、ドキュメントを掘り下げるなら、機能の奥深さに驚きます。


何が壊れるのか、そしてどう対処するか

ほとんどのプラグインはメインスレッド上にあることを前提としており、同期なしでワールド状態を安全に読み書きできると考えています。Foliaではそれは間違っています。プラグインが「ブロックXが石であることを確認して、それを空気に変える」ような処理をしたら、そのレースコンディションはPaperでは決して起きないような方法でスレッド間で発生するかもしれません。プラグインの故障を予期してください。

具体的な例をいくつか:

  • リージョン間のテレポーテーションは追加の複雑さを伴い、プラグインが注意深くなければデッドロックが発生する可能性がある
  • ワールドボーダーチェックはリージョン認識であり、期待と異なる動作をするかもしれない
  • タイマーとスケジュール済みタスクはデータ破損を避けるためにリージョン安全である必要がある
  • リージョン境界を越えたエンティティ追跡はプラグイン更新が必要

Foliaドキュメントでは互換性のないパターンが明示的にリストアップされています。プラグインの互換性を評価する場合は、ティックロジックを直接操作するか、チャンクデータへのシングルスレッドアクセスを前提としているかを確認してください。


Foliaが活躍する条件

16コア以上のマシンを持っている。サーバーが定期的に200人以上の同時プレイヤーに達する。プレイヤーが地理的に散らばっている(スポーンに集中していない)。カスタムプラグイン基盤を持っているか、既存プラグインの移植に対応できる。

この4つの条件に当てはまりますか。ならあなたは候補です。

8コアVPS上で50人のプレイヤーを運営しているのなら、Paperのままにしてください。得られる利益は互換性の課題を正当化しません。プレイヤーがほぼスポーン地点に集中している100人のSMPなら、Foliaは役に立ちますが、散らばったサーバーほど劇的ではありません。

ですが、次世代の真剣な大規模Minecraftコミュニティを構築しているなら、Foliaは性能の天井が本当に高い場所です。adderall_abuserのスキンironmouseのスキンのような活動的なコミュニティメンバーが大規模サーバーで既にこの領域を探索しています。Modrinthのストリーミングコミュニティや大規模サバイバルプロジェクトをチェックすれば、Foliaがより頻繁に登場するのに気付くでしょう。


検討する価値のある代替案

Paper。 ほとんどのサーバーにとって依然としてゴールドスタンダードです。安定し、よく理解されており、膨大なプラグインエコシステムを持っています。Foliaが過剰に思えるなら、Paperの最適化機能(非同期チャンク読み込み、エンティティAIティック削減など)で十分かもしれません。

Purpur。 Paperフォークで、プレイヤーごとの最適化を追加しています。プレイヤー体験が大きく異なるサーバー(AFK多数、積極的に探索する者)に向いています。Foliaほどのアーキテクチャ変更はなく、より的を絞ったパフォーマンス向上です。

Fabric Server。 モッサポートが必要なら(プラグインではなく)、Fabricエコシステムは実はサーバー向けも今かなり堅牢です。同じ方式でマルチスレッド化されていませんが、軽量で高速です。

正直なところ、Foliaは特化しています。特定の問題を特定のスケールで解決するものです。それ以外のすべては、思慮深い設定をしたPaperが今なお正しい選択です。

<! - gh-polish-start - > <! - gh-polish-end - >