マイクラのマルチプレイサーバにおいて特定エリアが重いとき

この記事は実例やマイクラの特性をもとに記事にしたものです。
今後のバージョンアップなどによって内容を更新する場合があります。

記事の内容は、Java Edition のマルチサーバを利用している人向けの内容として記事にしています。
一部は Bedrock Edition(統合版)やシングルプレイの場合でも当てはまる箇所はあると思いますが、仕様や実装が異なる場合もありますので、ご注意ください。

必ずすべての記事内容を確認してください。
記事上部で記載した指摘事項だけが原因ではないことが、よくあります。

最近、Youtube などでマルチプレイサーバを実況するなどが多くなり、その際に特定のエリアで遅くなるなどの不具合を見かけることが多くなってきた。

これらは、通常のマルチプレイサーバでも見かけることがあるので、それらの原因をちょっとまとめておこうかと思い記事にした次第。

そもそも論

サーバは、プレイヤーPCほどの CPU スペックは本来必要ないのだが、それでも最低スペックというのがある。

  • メモリ容量
  • ストレージはSSDとすべき(HDD非推奨)

このあたりはマイクラサーバーの処理を安定させる要素の中で、かなり重要なので、良く考えるべき。

特にクラウドサーバや VPC サービスを利用している場合

これらスペックについては、かなりシビアに影響する。
というのも、そもそもクラウドやVPCは、あくまで「仮想サーバ」。
当然ホストサーバが複数の仮想サーバの稼働状況を監視しながら、動的に処理能力を割り当てるので、ホストサーバ全体の処理負荷が高い状態になれば、それだけ処理は重くなる。

そしてこれらはおそらく、契約プランによってサーバのグレードが変わる。
つまり「お金」で解決するしかない。

そこに繋がる「回線」も重要

あとクラウドやVPCでどうしても逃れることができないのが、ネットワーク回線の問題。
いくら高額なクラウドやVPCを契約利用していても、そこに繋ぐための回線が雑魚では意味がない。

昨今は光ファイバーのプランであっても、激安を謳って提供しているプランもあるが、通信品質については、正直おすすめできない場合が多い。
個人的には高くても、NTTが提供しているフレッツ網のサービス、しかもマンションに住んでいたとしても、個宅向けのプランを導入するのをお勧めする。
(ただしマンションによっては、個宅向けの光回線が敷設できない場合もある。マンション管理人や不動産会社に必ず確認すること。)

ゲームのどのワールドでも全体的に処理落ちや動作遅延が発生する場合

ここからは本体の問題。まずは CPU のスペック不足を疑ってみる。
Linux系であれば top, vmstat, sar, free といった各種コマンドで確認する。

特に昔から運用している場合、ver.1.17 あたりから処理負荷の高めな要素が増えているので、そもそもバージョンアップによるスペック不足も疑ったほうがいいかも。

特定のワールド・エリアで処理落ちや動作遅延生じる場合

その場所にある「何らかの要素」を処理するために大量のメモリを消費

メモリを食い潰した時点でメモリスワップが発生
(メモリの内容をストレージに退避する処理が発生)

しかもスワップ先が HDD 領域の場合などの遅いストレージ

という流れで、特定のエリアに入った途端、急激にスローダウンする場合がある。

この場合の対策としてはメモリを増設する、または処理落ちや遅延が生じるようなアイテムの利用や密集状態がワールド内で発生していないか確認し、それを解消するのが、有効な対策となる。

同一ワールド内でも、お互い離れた場所でプレイしている場合

同一ワールド内かつ比較的同じ場所でプレイしている場合、サーバーが処理するエリアは1箇所で済むので、余程複雑な処理(たとえば、複雑な回路を動かす、大量の看板やチェストを設置しているなど)をしていなければ、サーバーはお互いのプレーヤーで必要な共通の情報を「よしな」に合理化して処理するので、処理落ちのリスクは低くなる。

逆に、複数のエリアでプレイヤーがそれぞれの活動をする場合は、処理は重くなる。

特に問題となるのは「ワールドを新規に広げる行為」。
例えばバージョンアップなどで新しいバイオームが追加された場合、それらを探すために、同時に四方八方に分かれて行動することがある。
当然ながらサーバーはそのプレイヤーそれぞれで、新規に踏み入れたチャンクをどんどん生成することになるので、処理落ちのリスクは高くなる。

たまに配信でみかけるのは、ワールドの描画が間に合わない状態でエリトラで飛んでいたら、いきなり山が現れて激突したり、地中に描画されて生き埋め状態になったりなど。

そうなると座標を控えてもいない場合も多く、拠点は遙か手前の場所だったりすると、散乱した持ち物を探せなくなったり、それらを探しているうちに時間切れで消えてしまうこともあるので、そもそも注意が必要。

余談だけども

OSや導入しているパッケージ類についてパッチが提供されている場合は、アップデートしたほうがいい。

というのもアップデートによって、バグが改善されることが、間接的に処理の改善に繋がることがある。

ただし、これは別に「バージョンアップしろ」という意味ではなく、あくまでアップデート・パッチ対応をしろという意味。
アプリケーションの推奨バージョンに倣ったバージョンであれば、バージョンアップまで行う必要はない。
OS 等を無闇にバージョンアップしてしまうと、OS 側のメモリ消費増加や処理が重くなる可能性がある。
(無論 OS にもサポート期間があるので、それに倣う必要はある。)

配信でマイクラサーバを扱うのであれば

クラウドや VPC を利用したほうが手間がかからないし、契約や運用も楽なのはわかるけど、長期に渡って運用したり、箱単位でマルチサーバを利用するのであれば、実機(オンプレミス)でサーバを準備したほうが、安定性は格段に高い。

Javaまわり

Java Edition は文字通り Java というプログラム上で動く。
そのため Java そのものの仕様や特性が、ゲームサーバの挙動にとても影響する。
そして Java という言語、マイクラ開発当初はゲーム開発のうえで先見性があったのだが、今となってはそうではもない。
むしろゲームシステムを Java で制作する場合、そのパフォーマンスを発揮するには「足枷」とすらなり得てしまう。

それでもマイクラのサーバプログラムは、まだ Java の特性を許容した実装が為されているし、Java で開発されてるがゆえ、mod 追加などの自由度が高いのも事実。

この辺りのバランスや動向にも注意を払う必要がある。
これらの理由から Java そのものについても、バージョンアップやパフォーマンスアップデートがあるので、状況を見て、定期的にアップデートしたほうがいい。

マルチプレイサーバの起動オプション

Java のプログラムは、起動時に「メモリ割り当て」をオプションで行うことができる。Minecraft も然り。
通常の Java プログラムおいて、これらを意識する必要はないのだが、ゲームサーバにおいては、このオプションを設定し、サーバの物理メモリに応じた領域を確保したほうが、パフォーマンス向上に繋がることが多い。

これ以外にも、起動時の際に最適なオプションが存在しているので、ハードウエアの仕様に合わせて、それらオプションを設定することをお勧めする。

ゲームの中の状態

建築物や装置が密集している

マイクラはプレイヤーのいる位置を基準にして、その周辺に設置されている建物や装置を含めたワールドの処理を行っている。

そのため、プレイヤーの存在する位置にそれらが多く存在する場合、処理がかなり重くなる原因になる。

複雑な建築物は、存在するだけで負荷がかかることもあるが、特に装置を設置している場合は、未使用時は停止できるような回廊にすることをお勧めする。

チェスト・旗・看板・額縁・ホッパー・…などなど

これらはマイクラサーバにおいて、かなり負荷が高い。

mobの湧き状態

マイクラには、mob の湧く距離が決まっている。これらの特性は別記事で照会しているので、そちらを参照してほしい。

特に気になるのは、mob は地下にも湧くという事。
1.17 以降で地下洞窟が大量に生成されるようになり、1.18 からは、Y軸が更に深くまで生成されるようになった。
しかも1.18 の地下拡張は、1.17 までで生成されたワールド場でも拡張されるため、より深い場所で mob が湧いている可能性もある。

地下洞窟や地下建造物

要するに、地下空洞があると、その場所の1ブロック毎に明るさや mob 湧きの試行などが行われることになる。
これら単体では処理負荷が高くなくても、多くなれば負荷になることがある。
これらに最も効果的なのは「埋め戻し」だが、現実てきではないことも多いので、せめて拠点については、湧き潰し(松明による明るさの確保)をしたほうが良い

水流・溶岩流

整地や景観を整えるために、表面だけ埋めることがあるとは思うが、特に水流・溶岩流になっている場合は、通常のブロックで埋めていまうことをオススメする。
というのも(溶岩流はアイテムを落としても燃えるだけなので、水流に比べて処理は軽いと思うのだが)水流は、流れや流量といった内容を計算処理しているため、特に複雑な状態で水面だけを埋めてしまった場合、負荷に繋がるおそれがある。

これも最も効果的なのは「埋め戻し」。特に砂漠バイオームで入手可能な「砂ブロック」は、これら埋め戻しにとても効果的。

ワールドの状態を把握するための裏技

「スペクテイターモード」の使用をおすすめする。いわゆる「神視点モード」。
プレイヤーが存在した状態で、この状態を動かせば、地中の状態だけでなく、mob の湧き状態も含めて把握することができるようになる。

ただしこのモードは、ワールドの状態を簡単に把握できてしまうモードのため、配信でマイクラをプレイ実況している場合は「チート技」となってしまう。

そのためこのモードを利用する場合は、あくまでサーバ管理者に限定して利用し(そうでない場合は、利用する条件を厳しく決めた上で運用し)、ゲームプレイの方向性を見極めたうえで、プレイヤー(配信者)に伝える要否も含めて、十分検討すべきだと思う。

現状自分も、このモードは、厳密なルールに基づいて運用している。