[Minecraft備忘録#2]ロールバックしすぎる!GCでどうにかならないか・・

こんにちは!マインクラフターのてるだよ。
前回サーバーには入れたけど、ロールバックがすごいということであきらめかけてたんだ。
なぜこんな現象が起きてしまうかという根本の部分の話をしてこうかと思う!

使用しているMODと主のPCスペック

前回同様今回記事にしていくのはMODが入っているforge server。
バニラサーバーにはそこまで役に立たない可能性大

このサーバーは、

  • 1.19.2-43.2.0のforge

  • 50個のMOD

  • サーバーを起動しているPCと鯖主のプレイPCが同じ

という特徴。

MOD一覧

  • [1.19.2][forge43.1.1]mod_CutAllSMP_v2.5.2.jar

  • [1.19.2][forge43.1.1]mod_DigAllSMP_v2.3.3.jar

  • [1.19.2][forge43.1.1]mod_MineAllSMP_v2.6.6.jar

  • [1.19.2][forge43.1.1]mod_StorageBox_v3.2.4.jar

  • appleskin-forge-mc1.19-2.4.2.jar

  • AutoLeveling-1.19.2-1.14.jar

  • awesomedungeonend-forge-1.19.2-3.0.0.jar

  • awesomedungeon-forge-1.19.2-3.0.0.jar

  • awesomedungeonnether-forge-1.19.2-3.0.0.jar

  • awesomedungeonocean-forge-1.19.2-3.0.1.jar

  • CosmeticArmorReworked-1.19.2-v1a.jar

  • create-1.19.2-0.5.0.h.jar

  • createaddition-1.19.2-20221230a.jar

  • detead-mod-7.2.12.jar

  • dynamiclights-1.19.2.1.jar

  • expandedstorage-8.1.0-beta.3+1.19.2-forge.jar

  • gravestone-1.19.2-1.0.1.jar

  • infernalmobs-1.19.2.4.jar

  • InventoryProfilesNext-forge-1.19-1.9.1.jar

  • jei-1.19.2-forge-11.5.2.1007.jar

  • journeymap-1.19.2-5.9.2-forge.jar

  • kotlinforforge-3.9.1-all.jar

  • libIPN-forge-1.19-2.0.1.jar

  • libraryferret-forge-1.19.2-3.0.0.jar

  • Mekanism-1.19.2-10.3.5.473.jar

  • MekanismAdditions-1.19.2-10.3.5.473.jar

  • MekanismGenerators-1.19.2-10.3.5.473.jar

  • MekanismTools-1.19.2-10.3.5.473.jar

  • mining_dimension-1.19.2-1.0.0.jar

  • Oh_The_Biomes_You'll_Go-forge-1.19.2-2.0.0.13.jar

  • OptiFine_1.19.2_HD_U_I1.jar

  • rebornstorage-1.19.2-5.0.2.jar

  • refinedstorage-1.11.4.jar

  • refinedstorageaddons-0.9.0.jar

  • rsrequestify-2.3.0

  • sit-1.19-1.3.3.jar

  • TerraBlender-forge-1.19.2-2.0.1.136.jar

  • theoneprobe-1.19-6.2.2.jar

  • TravelersBackpack-1.19.2-8.2.11.jar

  • twilightforest-1.19.2-4.2.1493-universal.jar

  • UntranslatedItems-forge-1.19.2-1.5.jar

  • voicechat-forge-1.19.2-2.3.28.jar

  • deeperdarker-forge-1.1.6-forge.jar

  • witherstormmod-1.19.2-3.1.1.jar

  • SkyVillages-1.0.1-1.19-forge-release.jar

  • illageandspillage-1.19.2-1.2.4.jar

  • geckolib-forge-1.19-3.1.40.jar

使用しているPCのスペック

  • intel core i5 10400F

  • RTX3070

  • RAM32GB

  • Server本体はHDDに格納

  • 有線

メモリって単に割り当て量を増やせばいいわけではない!

サーバーが重いときは、メモリ容量を増やしなさいと大体の記事には書いてある。
だけど半分間違いだと僕は思う。
前回記事でもよく出てきたこの画面。

この左上のグラフは、メモリの使用量。
基本的には、サーバーが重くなる原因はメモリだと思ってるけど、この左上ぎざぎざなってる。

これはメモリがある程度使用されたら、その使ったメモリ領域を解放しているから、がくんと下に落ちちゃう。
この動作をガページコレクション(GC)と呼んだりする。
この動作を行う際に、サーバーが少しだけ重くなるという特徴があり!

メモリの解放領域が増えれば増えるほど、このGCは時間がかかり動作は重くなる。

GCについて詳しく

GCについて少しだけ一般人の知識として話そうと思う。

メモリはさっき言ったようにある程度使われた後に、領域解放をする。はず。
その時、必ずって言っていいくらいサーバーは「がくん」って動きをする。
それを「ロールバック」とか「重い」とか言うんじゃないかなって勝手に思ってる。

で、GCってなんかいろいろやり方があるみたいなんだよね。

  • ZGC

  • G1GC

  • ShenandoahGC(できなかった)

  • ConcMarkSweepGC(できなかった)

くらいしかマイクラで使ってる人はいないみたい。
先人たちを信じてこの3つを試していこうと思う。

G1GCでやってみる

G1GC(ガページファーストガページコレクション)は、デフォルトGCらしい。
ヒープサイズが6GB以上
一時停止可能時間が0.5sec未満

に向いているらしい。

よくわからない。けど、目標停止時間は絶対に守る
GCはマイナーGCとメジャーGCっていうのがあって、すごい細かくマイナーGCをやって、使用ヒープが増えて限界値まで来るとメジャーGCをしてぎざぎざが出来上がる。

G1GCはCMSGC(ConcMarkSweepGC)よりCPUを使うらしい。
だから、もし-XX:+UseConcMarkSweepGCと書いてあったらCMSGCになってしまう。

-XX:+UseG1GCは絶対に入れる必要がある。

目標停止時間は初期値で200msで0.2秒らしいけど、-XX:MaxGCPauseMillisで調節ができる。人間の知覚の限界が200msらしいから初期値でいいかな。と思いつつ、500msに変えてみた。

-XX:+UseG1GC
-XX:MaxGCPauseMillis=500
-Xmx16G
-Xms4G
-Xmn1G

不穏なグラフになってしまった。
ぎざぎざのところでは問題なくプレイができるが、ごちゃごちゃしている部分では、ロールバックをしてしまう。

てかGCされてる・・・?

-XX:+UseG1GC
-XX:MaxGCPauseMillis=500
-Xmx16G
-Xms16G

ぎざぎざになったけど、定期的にがくんとロールバックしてしまう。

-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
-Xmx16G
-Xms16G


くそでかロールバックを繰り返すだけになってしまった。
これは厳しい。

-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
-Xmx4G
-Xms4G


今までのもの全て何が違うのか体感上ゲームではわかんない。

-XX:+UseG1GC
-Xmx4G
-Xms4G


なんだかんだ一番落ち着く気がする。

-XX:+UseG1GC
-Xmx16G
-Xms16G


-Xmx16G
-Xms16G
-XX:+UseG1GC
-XX:+UnlockExperimentalVMOptions
-XX:G1MaxNewSizePercent=20
-XX:G1ReservePercent=30
-XX:MaxGCPauseMillis=20
-XX:+DisableExplicitGC

G1GCでは限界を感じたからZGCを試してみる。

ZGCでやってみる


-XX:+UseZGC
-Xmx16G
-Xms16G

これだとすごい大きなロールバックが発生してしまった。
Minecraft Japan WikiのおすすめJVMを試してみた。

-XX:+UseZGC
-Xmx16G
-Xms16G
-XX:+UnlockExperimentalVMOptions
-XX:ZUncommitDelay=50
-XX:+AlwaysPreTouch
--add-modules jdk.incubator.vector

結局ロールバックが大きい。これではプレイは厳しい。

MODを入れすぎると絶対こうなってしまうのか・・・
解決方法わかる人いたらコメント頂けたら幸いです。

備忘録なのでメモ程度だけど誰かの役に立てばいいな!

この記事が気に入ったらサポートをしてみませんか?