Docker環境でMinecraftサーバは重い?
itzg/minecraft-serverコンテナでMinecraft1.12.2のような古いサーバを動かすときにはJava実行環境をjava8-openj9以外がよろし!
(自分だけかもしれないけど…)
自宅MinecraftサーバMod環境で、Mobが多く出現しているように見えないにも関わらず
・村人や他Mobの動きがカクカクしたりワープする
・食べ物を食べたときの咀嚼がやたら長い
・歩いていると突然ロールバックする
といったゲーム処理が追い付いていない時に発生する症状が目立つこと気づきました。
原因を探すにあたりサーバ側のシステムモニタを眺めていると
・Mod環境(Minecraft Ver1.12.2)は1コアのみ100%に張り付いている
・まったり環境(Minecraft Ver1.17.1)は複数コアが使用されている
・ディスク動作との関連はなさそう
といったところが見えてきました。
さて、どうする?心境としては
・ゲームサーバ側設定変更はしたくない。
・CPU使用率が100%でもゲーム処理が追い付いていればOK。
・実績のあるコンテナである。
・サーバPCリプレイスするには金がない
・モノグサなのでメンドクサイのは勘弁(ここ大事)
お手軽にいじれるところはないかとコンテナのドキュメントを読んでいるとコンテナ内にあるゲームサーバを動かすJava環境が選べる旨の記載がありました。
Dockerに移行する前のMod環境はJavaはOpenJavaを使っていたので、名前的に近いjava8-openj9を指定していました。モノは試しに他のJava実行環境に切り替えてみることに。
1) java8-openj9の古いコンテナを削除して
2) Java環境をjava8としたコンテナ再作成して
3) コンテナ起動
恐ろしいほどにあっけなく切り替え完了。ただコンテナを再作成しただけ。
Dockerがなければアンインストール/インストールやらなければならないハズなのに。
Mod環境は…軽くなった。
CPU使用率は相変わらず100%に張り付いているけれど、タイムリープしにくくなり無限咀嚼もなくなった。
Java実行環境だけでこんなに変わる?