Foliaとは
Minecraftサーバーの一種で、プレイヤーの負荷分散と並列処理を最適化することを目的としている。PaperMCの一部ではなく独立したプロジェクトとして開発されている。
Foliaの特徴
独立した領域の形成
近くのロードされたチャンクをグループ化し、独立した領域を作る。各領域には独自のティックループがあり、20TPSで実行される。全チャンクをシングルスレッドで処理するのではなく、複数チャンクをグループ化してグループごとに並列処理することでマルチコアで動かせるようにしている。
ティックループを独立した領域ごとに分割し、並列処理することで、サーバーのパフォーマンスを向上している。
並列処理
各領域のティックループはスレッドプールで並列して実行される。大規模なプレイヤーがいるサーバーやプレイヤーが広範囲に散らばっているサーバーに対して効果的。
恩恵を受けるサーバー
Skyblockやサバイバルマルチサーバーは、プレイヤーが広範囲に散らばるので恩恵を受けやすい。人がたくさんいる大規模なサーバーも。
Foliaに最適なハードウェア
理想的には16コア以上(スレッドではなくコア)が適切。つまりたくさんコアを積んでいるマシン(Xeonなど)で動かすのに最適。
Spigotやpaperはシングルスレッドで動作するため、サーバーに求められるのはコア数ではなく動作周波数。なのでXeonのような多コア低動作周波数のようなマシンではパフォーマンスが落ちる。Foliaは各領域は独自のスレッドで処理されるため、メインスレッドのボトルネックが解消される。あとプラグインも別スレッドで動作するっぽいのでマップ系プラグインをフル稼働させてもゲーム自体は重くならない。。。はず。
実行環境
今回用意した環境
![](https://mikuverse.win/wp-content/uploads/2024/05/image-1.png)
マシン NEC Express5800/R120g-1E N8100-2428Y(ヤフオクにて落札)
CPU E5-2630 V4 ×2基 (ベース2.20GHz, ターボ3.20GHz,10C20T ×2基 = 20C40T)
メモリ 64GB DDR4
SSD 240G SATA
HDD 1TB SATA
ネットワーク 宅内1G
Internet フレッツ光 1G
基盤 Proxmox
実際に生活サーバーを運営しているVMの割当
OS Ubuntu server
コア割当 26core(13c26t)
メモリ割当 35GB
SSD OS他 キャッシュ有
HDD マップ保存用 キャッシュ有
今回ブログ記事で動かす環境
OS Ubuntu
コア 20c(10c20t)
メモリ 24GB
HDD キャッシュwrite back
構築
注記 このやり方は2024年5月時点でのやり方です。
javaインストール
sudo apt install openjdk-17-jre-headless
Foliaをダウンロード
Gitからクローンする
git clone https://github.com/PaperMC/Folia.git
ダウンロードしたフォルダに移動
cd Folia
起動.jarを自分でビルドする必要があるのでビルドする。
パッチ適応
./gradlew applyPatches
初回は失敗することがある。赤線で囲った文字列が出てきたら、Githubをアカウントを登録する必要がある。
![](https://mikuverse.win/wp-content/uploads/2024/05/image.png)
以下の2つのコマンドを入力
git config --global user.email "[email protected]メールアドレス"
git config --global user.name "Your Nameアカウント名"
再度./gradlew applyPatches を実行
BUILD SUCCESSFULと出れば成功
次にjarファイルを作成する。これまた時間がかかるので待機。
./gradlew createReobfBundlerJar
完成したjarファイルは、~\Folia\build\libs\にあるので実行したいフォルダに移動する。
![](https://mikuverse.win/wp-content/uploads/2024/05/image-2.png)
homeディレクトリにserverフォルダを作成
cd
mkdir server
移動
cp /home/mina/Folia/build/libs/folia-bundler-1.20.4-R0.1-SNAPSHOT-reobf.jar /home/mina/server
start.shを作成。細かいことはよくわからないので最小構成で。メモリは20GB割り当てた。
java -jar -Xms20G -Xmx20G folia-bundler-1.20.4-R0.1-SNAPSHOT-reobf.jar
権限変更
sudo chmod 775 start.sh
./start.sh
Failed to load eula.txtと出るので、eula.txtのfalseをtrueに変更。再度実行。
諸事情によりサーバーポートを50000に変更しています。
マイクラでアクセスしてみて入れたら成功です。
/tpsで負荷を見れます。サバイバル1ヶ月半、同接プレイヤー3人いるサーバーの例です。
max7人いたときも快適にプレイできていました。古いCPUなので完璧ではありませんが。
エンティティが1337もいるのでMSPTが少し高めですが、TPS20で動作は快適です。
![](https://mikuverse.win/wp-content/uploads/2024/05/image-3.png)
![](https://mikuverse.win/wp-content/uploads/2024/05/image-6.png)
プラグインについて
spigotプラグインが全て使えるわけではないので、対応表を出しておきます。ここから、対応しているプラグイン一覧を見れます。
マッププラグインについて
有名なdynmapが対応していませんが、bluemapという別のマッププラグインが対応しているのでこれを使うことをおすすめします。レンダリングがマルチコアでできるだけでなく、このプラグインで使用できるコア数を指定できるので、ゲームと使用コアを分けることができます。実際に運用しているサーバーでは、26コア(13c26t)の内10コア(5c10t)をマップレンダリングに割り当てています。
![](https://mikuverse.win/wp-content/uploads/2024/05/image-4-1024x501.png)
立体的に見ることもできます。
![](https://mikuverse.win/wp-content/uploads/2024/05/image-5-1024x503.png)
動作周波数が高いCPUを使っているのであればSpigot,Paperでいいと思いますが、たくさんコアを積んだXeonのようなCPUでサーバーを立てたいときはFoliaがいいかもしれません。
よいマインクラフトライフを。
コメント