[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に格納
有線
メモリって単に割り当て量を増やせばいいわけではない!
サーバーが重いときは、メモリ容量を増やしなさいと大体の記事には書いてある。
だけど半分間違いだと僕は思う。
前回記事でもよく出てきたこの画面。
![](https://assets.st-note.com/img/1677385278395-of3ls89ZSz.png?width=1200)
この左上のグラフは、メモリの使用量。
基本的には、サーバーが重くなる原因はメモリだと思ってるけど、この左上ぎざぎざなってる。
これはメモリがある程度使用されたら、その使ったメモリ領域を解放しているから、がくんと下に落ちちゃう。
この動作をガページコレクション(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
![](https://assets.st-note.com/img/1677417506762-uXRfyCC8Np.png?width=1200)
不穏なグラフになってしまった。
ぎざぎざのところでは問題なくプレイができるが、ごちゃごちゃしている部分では、ロールバックをしてしまう。
てかGCされてる・・・?
-XX:+UseG1GC
-XX:MaxGCPauseMillis=500
-Xmx16G
-Xms16G
![](https://assets.st-note.com/img/1677418141551-el5np6Y8QV.png?width=1200)
ぎざぎざになったけど、定期的にがくんとロールバックしてしまう。
-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
-Xmx16G
-Xms16G
![](https://assets.st-note.com/img/1677418464029-J5WPa39wyf.png?width=1200)
くそでかロールバックを繰り返すだけになってしまった。
これは厳しい。
-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
-Xmx4G
-Xms4G
![](https://assets.st-note.com/img/1677418774786-ICy8uUm8re.png?width=1200)
今までのもの全て何が違うのか体感上ゲームではわかんない。
-XX:+UseG1GC
-Xmx4G
-Xms4G
![](https://assets.st-note.com/img/1677419285893-isdHJnaJkO.png?width=1200)
なんだかんだ一番落ち着く気がする。
-XX:+UseG1GC
-Xmx16G
-Xms16G
![](https://assets.st-note.com/img/1677419486353-oVqkJ5tg6G.png?width=1200)
-Xmx16G
-Xms16G
-XX:+UseG1GC
-XX:+UnlockExperimentalVMOptions
-XX:G1MaxNewSizePercent=20
-XX:G1ReservePercent=30
-XX:MaxGCPauseMillis=20
-XX:+DisableExplicitGC
![](https://assets.st-note.com/img/1677421568744-Jm2203sZXW.png?width=1200)
G1GCでは限界を感じたからZGCを試してみる。
ZGCでやってみる
-XX:+UseZGC
-Xmx16G
-Xms16G
![](https://assets.st-note.com/img/1677419696040-c0R7n2j1VP.png?width=1200)
これだとすごい大きなロールバックが発生してしまった。
Minecraft Japan WikiのおすすめJVMを試してみた。
-XX:+UseZGC
-Xmx16G
-Xms16G
-XX:+UnlockExperimentalVMOptions
-XX:ZUncommitDelay=50
-XX:+AlwaysPreTouch
--add-modules jdk.incubator.vector
![](https://assets.st-note.com/img/1677420443155-sOAlIyLqtD.png?width=1200)
結局ロールバックが大きい。これではプレイは厳しい。
MODを入れすぎると絶対こうなってしまうのか・・・
解決方法わかる人いたらコメント頂けたら幸いです。
備忘録なのでメモ程度だけど誰かの役に立てばいいな!