目的
Minecraft が高負荷になる場合に FullGC が発生したかなどの JVM 側の負荷なのか 単純に Minecraft 自体での処理が重いのかなどの切り分けを行うためにモニタリングしたい。
方法
自分のサーバは基本的に prometheus によるモニタリングを行っているので Minecraft のサーバ自体のモニタリングが行えるとよい。
手順
前提
- Minecraft が運用されている
- Prometheus が運用されている
- Grafana が運用されている
JMX のメトリクスを取得できるようにする
jmx_exporter によるメトリクスの取得を行うための javaagent の jar を落とす。
$ curl -OLJ https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar
jmx_exporter 用の config ファイルを用意。今回は簡単のため空ファイルを作成。
$ touch config.yaml
javaagent のオプションを指定して起動。jmx_exporter の jar ファイルはパス指定でも良さそうだが config.yaml がうまく動かなかったので場所を変えたい場合は要確認。下記は 8080 ポートで開く例。(実運用では jmx_exporter で 8080 はあまり使わない)
java -jar -javaagent:.jmx_prometheus_javaagent-0.3.1.jar=8080:config.yaml -jar minecraft_server.jar nogui
Prometheus で メトリクスを取得するようにする
簡単な例。正確な記述は割愛。
- job_name: jmx static_configs: - targets: ['xxx.xxx.xxx.xxx:port']
グラフの用意
最近の Grafana では公式のページにある程度設定されたダッシュボードがあり、これを import することによってだいたいそのまま使うことができる様子。
https://grafana.com/dashboards/3457
下記のような表示になる。GC カウントも見られ、FullGC が多いかどうかを確認でき、メモリバウンドなのかなどの確認がしやすくなる。
結果
自分のサーバでは特に FullGC が発生してはいなかった。 原因としてログインしているユーザによる牧場で牛や豚が大量にいたことが原因のようだった。
その他
prometheus で minecraft 特有のメトリクスを取得も可能な様子。
https://github.com/sladkoff/minecraft-prometheus-exporter
この exporter は spigot という minecraft server に MOD が導入できる(api 利用が可能になる)ものを利用することによって可能な様子。自分はバニラサーバで動かしているので一旦導入は保留。