通信量から探るマイクラサーバーラグの改善

※2019年当時(Paper 前提)の話です。今のバージョンでは設定の名前や既定値が変わっているかもしれません。
まず、通信量によるラグはログイン時やTP時に起こるのでまずはそれを確認します。
これは既に知っている方が多いかと思いますが、ログイン時などに重いのは大きく分けて次の2つの理由があります。
- ログイン処理自体が重い(バグなど)
- ログイン直後のデータ通信量が多い
前者はプラグインのエラーログなどをご確認ください。
今回話すのは後者についてです。
ログイン直後に通信するデータというと、地形データ(デフォルトなら10チャンク分)、他のプレイヤーの動き、音符ブロックなどの音、、、が挙げられます。
これらが多くなればなるほどネットワーク帯域を圧迫し、帯域が細い環境のプレイヤーやサーバーを使っていると地形の読み込みに時間がかかって動けない、カクつく、などの症状が現れます。
ラグといえばping(ネットの応答速度)を考えるのが常識ですが、ログイン直後となれば通信量を疑います。
改善策
そこでまず、改善するために運営者が確認すべきこととして
- サーバーのネットワーク環境
- そこからの通信速度(特にアップロード速度)
- サーバーでログイン時に送信しているモノ
の3つが大きく挙げられます。
1,2は各自でやってください。3について話します。
3については、チャンク送信距離(spigot.ymlまたはserver.propertiesに記載)を主に確認し、できるだけ少なくできるように調整してください。(小さくしすぎると遠くの景色が見えなくなるため、性能と相談して最適な距離を見つけてください。)
すでに小さい場合や距離を可能な限り伸ばしたい場合は「Best View Distance」という最高のプラグインがありますので、そちらを参照してみてください。(前提としてspigotのフォーク版、paper-spigotを使う必要があります。)
データ容量圧縮
また、単なるデータ通信量削減として、標準搭載の圧縮機能を使うこともできます。
server.propertiesに「network-compression-threshold」という項目があり、これはその値以上の容量を圧縮するという意味で、その値を下げることで通信量を削減できる可能性があります。
例えばデフォルトの256なら小さいデータは圧縮をせず、チャンクなどの大きいデータは圧縮するというようになります。
\-1で圧縮の無効化です。値を減らすと圧縮するものが増えCPUへの負荷が増えます。海外サイトでは512を推している人が多いです。-1は著しく性能が落ちるそうです。これも様子を見ながら調整していくのがいいでしょう。
ちなみにBungeeCordを利用している場合は、マイクラサーバー側を-1にし、BungeeCord側を256や512にするのが最善なようです。