[1.17] Minecraftサーバー最適化ガイド

このガイドはYouHaveTrouble/minecraft-optimizationの日本語訳です。日本語訳は適当であるため、適時原文を確認することを推奨します。

本ガイドによって生じたあらゆる問題について責任を負いません。


Vanilla、Fabric、Spigot(またはPaperより下流のバージョン)をお使いの方は、server.propertiesを開き、sync-chunk-writesfalseに変更してください。このオプションはPaperとそのforkでは強制的に無効化されますが、それ以前のサーバー実装では、手動でこのオプションをオフにする必要があります。これにより、サーバーはメインスレッドからチャンクを保存し、メインtickの負荷を軽減することができます。

このガイドは、バージョン1.17のガイドです。一部の項目のみ1.15~1.16にも適用されます。

このガイドと他の情報源に基づいています(これらの情報源は、関連する場合、ガイド全体にリンクされています)。

導入

完璧な結果を得る事のできるガイドは存在しません。それぞれのサーバーには独自のニーズが存在しており、どれだけの犠牲を払うことができるのか、あるいは払うことができるかには限界があります。オプションを変更することで、サーバーのニーズを合わせて微調整することが、全てです。このガイドは、どのオプションがパフォーマンスに影響を与えているのか、何を変更しているのかを理解することを目的としています。

準備

サーバーJar

サーバーソフトウェアの選択によっては、パフォーマンスとAPIの可能性に大きな違いが現れます。現在、複数の有力なサーバーJARがありますが、様々な理由により使用を控えたほうが良いものもいくつかあります。

おすすめのサーバーJar:

Paper  - ゲームプレイやメカニックの不整合を修正しながら、パフォーマンス向上を目的とした最も人気のあるサーバーソフトウェアです。

Airplane - サーバーのパフォーマンスをさらに向上させることを目的とした Paper forkです。

Purpur - 機能とカスタマイズの自由に焦点を当てたAirplane forkです。

推奨されないサーバーJar:

Yatopia - "Paper forkの総力を結集し、最大限の不安定さとメンテナンス性を実現!" - KennyTV's list of shame これ以上何も言うことはありません。(このプロジェクトは中止されています)

Sugarcane - Yatopia 2.0

Mohist - "Mohistは悪意があり、ゲームを壊し、非常に不安定であるようにプログラムされています" - 使うべきではない理由

非同期を謳った有料サーバーjar - 99.99%の確率で詐欺です。

Bukkit/CraftBukkit/Spigot - 利用できる他のサーバーソフトウェアと比較して、パフォーマンスの点で非常に時代遅れです。

AirplaneやPurpurよりもさらに下流にある多くのforkでは、不安定さやその他の問題が発生します。より多くのパフォーマンス向上を求めるのであれば、サーバーを最適化するか、個人的なプライベートforkに時間を投資してください。

ワールドの事前生成

ワールドの事前生成は、低予算のサーバーを改善するために、最も重要なステップの1つです。共有CPUやシングルコアのノードでホストされているサーバーでは、非同期のチャンク読み込みを十分に活用できないため、この方法が最も友好です。Chunkyなどのプラグインを使うことで、ワールドを事前に生成することができます。プレイヤーが新しいチャンクを生成しないように必ずワールドの境界線を設定してください。プラグインで自動生成をする場合、設定した範囲によっては数時間かかる場合があるので注意してください。

オーバーワールド、ネザー、エンドにはそれぞれ別のワールドの境界線を設定する必要があります。ネザーのディメンションはオーバーワールドの8倍小さいので(データパックで変更されていない場合)、サイズ設定を間違えるとプレイヤーがワールドの境界線の外へと出てしまうかもしれません。

宝の地図の探索範囲のような一部の機能がラグの原因となる為、必ずバニラのワールドの境界線を設定してください。(/worldborder set [距離]

設定

ネットワーク

server.propaties

network-compression-threshold

値: 256

この値により、サーバーが圧縮を試みる前のパケットサイズの上限を設定できます。この値を高く設定すると、帯域幅を犠牲にしてCPUを節約することができ、-1に設定するとこの機能が無効になります。この値を高く設定すると、ネットワーク接続の遅いクライアントに悪影響を及ぼす可能性があります。サーバーがプロキシのネットワーク上に存在する場合や、同じコンピュータ上に存在する場合(Pingが2ms以下の場合)は、内部のネットワークの速度が通常、追加の非圧縮トラフィックを処理可能であるため、この機能を無効(-1)にすることができます。

purpur.yml

use-alternate-keepalive

値: true

Purpurのalternate keepaliveを有効にすることで,接続状態の悪いプレイヤーがタイムアウトになることが少なくなります。TCPShieldとの互換性はありません。

これを有効にすると、1秒に1回keepaliveパケットがプレイヤーに送信され、30秒以内にどれも応答されなかった場合のみタイムアウトになります。つまり、1つのパケットがどこかでドロップしたからといって、プレイヤーがキックされることはありません。
Purpur Documentation - Configuration
The official documentation for Purpur. Purpur is a fork of Paper and Airplane with the goal of providing new and interesting configuration options, which allow for creating a unique gameplay experience not seen anywhere else.

チャンク

spigot.yml

view-distance

値: 4

view-distanceは、プレイヤー周りのチャンクの距離です。基本的には、プレイヤーから何かが起こるまでの距離です。これには炉の精錬、作物や苗木の成長などが含まれます。この値は、server.propatiesの値を上書きし、ワールドごとに設定可能であるため、spigot.ymlで設定する必要があります。これはno-tick-view-distanceの存在を考慮して、意図的に低く設定したいオプションであるため、3~4あたりに設定します。no-tickは、プレイヤーがtickすることなく、より多くのチャンクをロードする事を可能にします。これにより、プレイヤーはパフォーマンスに影響を与えること無く、より遠くまで見ることができます。

paper.yml

no-tick-view-distance

値: 7

このオプションでは、プレイヤーが見ることのできる最大距離をチャンク単位で設定することができます。これによりview-distanceを短くしてもプレイヤーにより遠くのチャンクを表示することができます。view-distanceを超えるチャンクはチェックされませんが、ストレージから読み込まれるため、やりすぎないようにすることが重要です。基本的には10が最大値となります。今の所、チャンクはview-distanceの設定に関係なくクライアントに送信されるので、このオプションの値を高くすると、接続速度の遅いプレイヤーに問題が生じる可能性があります。

delay-chunk-unloads-by

値: 10

このオプションでは、プレイヤーがいなくなった後のチャンクがロードされ続ける時間を設定できます。これにより、プレイヤーが前後に移動しても、同じチャンクを常にロードしたりアンロードしたりしないようになります。値が高すぎると、一度に多くのチャンクがロードされてしまいます。頻繁にテレポートされてロードされるエリアでは、そのエリアを恒久的にロードすることを検討してください。常にチャンクをロードしたりアンロードしたりするよりも、サーバーの負担が軽くなります。

max-auto-save-chunks-per-tick

値: 8

ワールドセーブの増分を遅くし、タスクの時間を分散させることで、平均的なパフォーマンスを向上させることができます。20~30人以上のプレイヤーがいる場合は、この値を8よりも高く設定するとよいでしょう。増分保存が間に合わなかった場合、bukkitは自動的に残りのチャンクを一度に保存し、再度プロセスを開始します。

prevent-moving-into-unloaded-chunks

値: true

この機能を有効にすると、プレイヤーが読み込みされていないチャンクに入り込み、メインスレッドに負担をかけるような同期読み込みが発生し、ラグの発生を防ぎます。プレイヤーが読み込まれていないチャンクに遭遇する確率は、no-tick-view-distanceが低いほど高くなります。

entity-per-chunk-save-limit

値:

      experience_orb: 16
      arrow: 16
      dragon_fireball: 3
      egg: 8
      ender_pearl: 8
      eye_of_ender: 8
      fireball: 8
      small_fireball: 8
      firework_rocket: 8
      potion: 8
      llama_spit: 3
      shulker_bullet: 8
      snowball: 8
      spectral_arrow: 16
      experience_bottle: 3
      trident: 16
      wither_skull: 4
      area_effect_cloud: 8

この項目では、指定した種類のエンティティを保存できる数に制限を設けることができます。大量のエンてィィが保存され、それを読み込む際にサーバーがクラッシュするという問題を避けるために、少なくとも各エンティティに制限を設けるべきです。エンティティのIDはMinecraft wikiで確認できます。制限はお好みで調整してください。すべてのエンティティの推奨値は10前後です。IDで他のエンティティをこのリストに追加することもできます。この設定オプションは、プレイヤーが大規模なMobファームを作るのを防ぐためのものではありません。

seed-based-feature-search-loads-chunks

値: true

これをfalseに設定すると、treasure-maps-return-already-discoveredfalseになっている場合のパフォーマンスが向上しますが、構造物が実際にはマップ上でマークされた場所にないなど、予期しない動作が発生する可能性があります。問題がないようであれば、これを変更してください。

Mobs

bukkit.yml

spawn-limits

値:

    monsters: 20
    animals: 5
    water-animals: 2
    water-ambient: 2
    water-underground-creature: 3
    ambient: 1

Mobを制限する計算は、[プレイヤー数] * [制限]です。「プレイヤー数」はサーバー上の現在のプレイヤー数です。論理的には、数字が小さいほど、Mobの数は少なくなります。per-player-mob-spawnは、Mobがプレイヤー間で均等に分配されるように、これに追加の制限を加えます。これを減らすことは両刃の剣です。確かにサーバーの仕事は減りますが、ゲームモードによっては自然にスポーンするMobがゲームプレイの大きな部分を占めています。mob-spawn-rangeを適切に調整すれば、20以下にすることもできます。mob-spawn-rangeを低く設定すると、各プレイヤーの周りに多くのMobがいるようになります。Paperを使用している場合は、paper.ymlでワールドごとのMob制限を設定できます。

ticks-per

値:

    monster-spawn: 10
    animal-spawns: 400
    water-spawns: 400
    water-ambient-spawns: 400
    water-underground-creature-spawns: 400
    ambient-spawns: 400

このオプションは、サーバーが特定のMobをスポーンしようとする頻度(tick)を設定します。water/ambientは、通常そんなに早く殺されることはないので、1tickごとにスポーンする必要はありません。モンスターの場合、スポーン間の時間をわずかに長くしても、スポーン率に影響はありません。ほとんどの場合、このオプションのすべての値を1より高くする必要があります。この値を高くすることで、Mobのスポーンが無効になっているエリアにサーバーがうまく対応できるようになります。

Spigot.yml

mob-spawn-range

値: 2

プレイヤーの周りでMobがスポーンする範囲を(チャンク単位で)狭めることができます。サーバーのゲームモードやプレイヤー数によっては、bukkit.ymlのspawn-limitsと一緒にこの値を下げた方がいいかもしれません。この値を小さくすると、多くのモブがプレイヤーの周りにいるようになります。この値はview distanceと同じかそれ以下で、ハードデスポーン範囲/16より大きくしてはいけません。

entity-activation-range

値:

      animals: 16
      monsters: 24
      raiders: 48
      misc: 8
      water: 8
      villagers: 16
      flying-monsters: 48

エンティティがtick(何かをする)のために、プレイヤーからどのくらいの距離が必要かを設定できます。この値を下げるとパフォーマンスが向上しますが、プレイヤーが近づかないと反応しないMobが出てきます。この値を下げすぎると、一部のトラップが壊れる可能性があります。

entity-tracking-range

値:

      players: 48
      animals: 48
      monsters: 48
      misc: 32
      other: 64

これはエンティティが見えるようになるまでのブロック距離です。プレイヤーには送信されません。この値が低すぎると、プレイヤーの近くに突然Mobが現れることがあります。ほとんどの場合、この値はentity-activation-rangeよりも高く設定する必要があります。

tick-inactive-villagers

値: false

activation range外でも村人をtickするかどうかを制御できます。これにより村人は通常通り進行し、activation rangeを無視します。これを無効にすると、パフォーマンスが向上しますが、一部の状況ではプレイヤーが混乱する可能性があります。これにより鉄トラップや貿易の補充に問題が生じる可能性があります。

nerf-spawner-mobs

値: true

スポナーによってスポーンされたMobがAIを持たないようにできます。ナーフされたMobは何もしません。spawner-nerfed-mobs-should-jumppaper.ymltrueに変更することで、水の中でジャンプするようになります。

paper.yml

despawn-ranges

値:

      soft: 30
      hard: 56

エンティティのデスポーン範囲(ブロック単位)を調整できます。これらの値を低くすると、プレイヤーから遠くにいるMobをより早く消すことができます。softは30程度にして、hardはview-distanceより少し大きめに調整すると、チャンクが読み込まれているポイントをプレイヤーが超えたときに、Mobがすぐにデスポーンしないようになります(paper.ymldelay-chunk-unloads-byでうまくいきます)。Mobがhardから外れると、即座にデスポーンされます。softとhardの間にいるときは、ランダムな確率でデスポーンされます。hardはsoftよりも大きくする必要があります。view-distanceに応じて、(view-distance * 16) + 8で調整してください。これは、プレイヤーが訪れた後にまだアンロードされていないチャンクを部分的に考慮しています。

per-player-mob-spawns

値: true

このオプションは、プレイヤーの周りにいるMobの数をスポーンに考慮するかどうかを決定します。Mob制限全体を占めるトラップを作っているプレイヤーのせいで、Mobのスポーンが安定しないという問題を回避することができます。これにより、シングルプレイヤーのようなスポーンが可能になり、spawn-limitsを低く設定することができます。これを有効にすると、パフォーマンスにごくわずかな影響がありますが、その影響はspawn-limitsの改善によって相殺されます。

max-entity-collisions

値: 2

spigot.ymlの同名オプションを上書きします。1つのエンティティが一度に処理できる衝突の数を決定します。0を指定すると、プレイヤーを含む他のエンティティを押すことができなくなります。ほとんどの場合、2で十分です。ゲームルールのmaxEntityCrammingの値がこの設定オプションの値を超えている場合、この設定は無意味になることに注意してください。

update-pathfinding-on-block-update

値: false

これを無効にすると、経路探索の回数が減り、パフォーマンスが向上します。Mobは5tick(0.25秒)ごとにパスを更新します。

fix-climbing-bypassing-cramming-rule

値: true

これを有効にするとエンティティが登っているときにcrammingの影響を受けないように修正されます。これにより登っていても狭い場所に無茶苦茶な量のMobが積まれることがなくなります。

armor-stands-tick

値: true

ほとんどの場合、これはfalseにしておけば安全です。アーマースタンドやその動作を変更するプラグインを使用していて問題が発生した場合は、再度有効にしてください。これにより、アーマースタンドが水に押されたり、重力の影響を受けたりしなくなります。

armor-stands-do-collision-entity-lookups

値: false

ここではアーマースタンドの衝突を無効にすることができます。これは、アーマースタンドがたくさんあって、何かと衝突する必要がない場合に役立ちます。

tick-rates

値:

      sensor:
        villager:
          secondarypoisensor: 80
          nearestbedsensor: 80
          villagerbabiessensor: 40
          playersensor: 40
          nearestlivingentitysensor: 40
      behavior:
        villager:
          validatenearbypoi: 60
          acquirepoi: 120

これは指定された行動やセンサーがどのくらいの頻度で実行されるかをtick単位で決定します。村人が道に迷うなどの問題がある場合は減らしてください。

airplane.yml

max-loads-per-projectile

値: 8

プロジェクタイルがそのライフタイム中に読み込みできるチャンクの最大量を指定します。減らすと、エンティティプロジェクタイルによるチャンクの読み込みが減りますが、トライデントやエンダーパールなどで問題が発生する可能性があります。

max-tick-freq

値: 20

このオプションはプレイヤーから最も遠い場所にあるエンティティがtickされる最も遅い時間を定義します。この値を大きくすると、視界から遠いエンティティのパフォーマンスが向上しますが、トラップが壊れたり、Mobの動作が大幅に遅くなる可能性があります。

activation-dist-mod

値: 7

Mobがtickされる際のグラデーションをコントロールします。DABはEARのようなハードカットオフではなく、グラデーションで動作します。DABは、近くのエンティティを完全にtickし、遠くのエンティティをほとんどtickしない代わりに、この計算結果に基づいてエンティティがtickされる量を減らします。これを減少させると、DABはプレイヤーの近くで起動し、DABのパフォーマンスが向上しますが、エンティティが周囲とどのように相互作用するかに影響し、トラップが壊れる可能性があります。

purpur.yml

dont-send-useless-entity-packets

値: true

このオプションを有効にすると、サーバーが空の位置変更パケットを送信するのを防ぐことで、帯域幅を節約できます(デフォルトでは、サーバーはエンティティが移動していなくても、各エンティティに対してこのパケットを送信します)。クライアント側のエンティティを使用するプラグインで問題が発生する可能性があります。

aggressive-towards-villager-when-lagging

値: false

これを有効にすると、サーバーがpurpur.ymllagging-thresholdで設定されたTPSのしきい値を下回った場合、ゾンビは村人をターゲットにしなくなります。

entities-can-use-portals

値: false

このオプションはプレイヤー以外のすべてのエンティティのポータル使用を無効にすることができます。これによりメインスレッドで処理されるワールドの変更によってエンティティがチャンクを読み込むことを防ぎます。これはエンティティがポータルを通過できなくなるという副作用があります。

villager.brain-ticks

値: 2

このオプションでは村人がどのくらいの頻度(tick)で処理するかを設定できます。3以上にすると、村人の動きが安定しなくなったり、バグったりすることが確認されています。

villager.lobotomize

値: true

ロボトミー化した村人はAIが剥奪され、たまにしか取引を補充しません。これを有効にすると、目的地までの経路探索ができない村人をロボトミー化します。解放するとロボトミー化が解除されます。

その他

spigot.yml

merge-radius

値:

      item: 3.5
      exp: 4.0

マージするアイテムとexpオーブの間の距離を決定し、地面に落ちるアイテムの量が減少します。これを高く設定しすぎると、アイテムやexpオーブが一緒にマージされると消えてしまうような錯覚につながります。この値を大きくしすぎると、一部のファームが破壊され、アイテムがブロックを介してテレポートできるようになります。アイテムが壁を通ってマージされないようにするためのチェックは行われません。exp は作成時にのみマージされます。

hopper-transfer

値: 8

ホッパーがアイテムが移動するのを待機する時間(tick)。これを増やすと、サーバー上にホッパーが多い場合はパフォーマンスが向上しますが、設定値が大きすぎると、ホッパーベースのクロックやアイテムソートシステムが壊れる可能性があります。

hopper-check

値: 8

ホッパーが上のアイテムや上のインベントリにあるアイテムをチェックするまでの時間(tick)です。この値を大きくすると、サーバーに多くのホッパーがある場合はパフォーマンスが向上しますが、ホッパーベースのクロックや水流に依存したアイテムソートシステムが壊れる可能性があります。

Paper.yml

alt-item-despawn-rate

値:

      enabled: true
      items:
          COBBLESTONE: 300
          NETHERRACK: 300
          SAND: 300
          RED_SAND: 300
          GRAVEL: 300
          DIRT: 300
          GRASS: 300
          PUMPKIN: 300
          MELON_SLICE: 300
          KELP: 300
          BAMBOO: 300
          SUGAR_CANE: 300
          TWISTING_VINES: 300
          WEEPING_VINES: 300
          OAK_LEAVES: 300
          SPRUCE_LEAVES: 300
          BIRCH_LEAVES: 300
          JUNGLE_LEAVES: 300
          ACACIA_LEAVES: 300
          DARK_OAK_LEAVES: 300
          CACTUS: 300
          DIORITE: 300
          GRANITE: 300
          ANDESITE: 300
          SCAFFOLDING: 600

このリストでは、特定の落ちているアイテムのデスポーンにかかる時間(tick)を、デフォルトよりも速くまたは遅く設定できます。このオプションは、アイテム消去系のプラグインの代わりにmerge-radiusと一緒に使用すると、パフォーマンスが向上します。

use-faster-eigencraft-redstone

値: true

これを有効にすると、レッドストーンが冗長なブロック更新を減らす、より高速な代替バージョンに置き換えられ、サーバーの作業量が減少します。これを有効にすると、ゲームプレイの不整合を引き起こすことなく、パフォーマンスを大幅に向上させることができます。これを有効にすると、craftbukkitからのいくつかのレッドストーンの不整合も修正されます。

disable-move-event

値: false

InventoryMoveItemEventは、そのイベントをアクティブにリッスンしているプラグインがない限り、発火しません。つまり、そのようなプラグインがあり、そのプラグインがこのイベントに対応できなくても気にしない場合にのみ、これをtrueに設定する必要があります。保護プラグインなど、このイベントをリッスンするプラグインを使用したい場合は、trueに設定しないでください。

mob-spawner-tick-rate

値: 2

このオプションでは、スポナーがtickされる頻度を設定できます。高い値を設定すると、多くのスポナーがある場合にラグが少なくなりますが、(スポナーの遅延と比較して)高すぎる値を設定すると、Mobのスポーン率が低下します。

optimize-explosions

値: true

これをtrueに設定すると、バニラの爆発アルゴリズムがより高速なものに置き換えられますが、爆発ダメージを計算する際に若干の不正確さが生じます。これは通常は目立ちません。

enable-treasure-maps

値: false

宝の地図を生成するのは非常にコストがかかり、探し出そうとする構造物が事前に生成されたワールドの外にある場合、サーバーがハングアップする可能性があります。事前にワールドを生成し、バニラのワールドボーダーを設定している場合にのみ、この機能を有効にすることができます。

treasure-maps-return-already-discovered

値: true

このオプションのデフォルト値は、新しく生成されたマップに未探索の構造物を探させるもので、通常は事前に生成された地形の外にあります。このオプションを rueに設定すると、マップは以前に発見された構造物につながるようになります。このオプションをtrueに変更しないと、新しい宝の地図を生成するときにサーバーがハングアップしたり、クラッシュしたりすることがあります。

grass-spread-tick-rate

値: 4

サーバーが草や菌糸を広げようとするまでの時間(tick)です。これにより、広い範囲の土が草や菌糸に変わるまでに少し時間がかかるようになります。拡散率の低下を目立たせずに減らしたい場合は、4程度に設定するとうまくいきます。

container-update-tick-rate

値: 1

コンテナの更新間隔をtickで表した時間。これを増やす事でコンテナの更新で問題が発生した場合には助けになるかもしれませんが(滅多にありません)、プレイヤーがインベントリを操作したときにデシンクが発生しやすくなります。

non-player-arrow-despawn-rate

値: 20

Mobが放った矢が何かに当たった後に消えるまでの時間をtickで指定します。プレイヤーは矢を拾うことができないので、20(1秒)のように設定するとよいでしょう。

creative-arrow-despawn-rate

値: 20

クリエイティブモードでプレイヤーが放った矢が何かに当たった後に消えるまでの時間をtickで指定します。プレイヤーは矢を拾うことができないので、20(1秒)のように設定するとよいでしょう。

Purpur.yml

disable-treasure-searching

値: true

イルカが宝の地図のような構造検索をするのを防ぎます。

teleport-if-outside-border

値: true

プレイヤーがワールドボーダーの外にいた場合、ワールドスポーンにテレポートできるようにします。バニラのワールド・ボーダーは迂回可能で、プレイヤーに与えるダメージを軽減することができるので便利です。

ヘルパー

ani-xray

値: true

これを有効にすると、X-rayから鉱石を隠すことができます。この機能の詳細な設定については、Stonar96の推奨設定を参照してください。この機能を有効にすると、実際にはパフォーマンスが低下しますが、他のX線対策プラグインよりもはるかに効率的です。ほとんどの場合、パフォーマンスへの影響はごくわずかです。

remove-corrupt-tile-entities

値: true

タイルの実体に関するエラーがコンソールに押し寄せている場合、これをtrueに変更します。これにより、エラーの原因となっているタイルの実体が無視されずに削除されます。タイルエンティティに関する警告が頻繁に出る場合は、なぜ壊れているのかを調査してください。これは根本的な問題を解決するものではありません。

nether-ceiling-void-damage-height

値: 127

このオプションが0より大きい場合、設定されたyレベル以上のプレイヤーは、あたかも奈落にいるかのようなダメージを受けます。これによりプレイヤーはネザーの屋根を使えなくなります。バニラのネザーの高さは128ブロックなので、127に設定した方がいいでしょう。何らかの方法でネザーの高さを変更した場合は、[ネザーの高さ] - 1に設定してください。

Java スタートアップフラグ

バージョン1.17のバニラMinecraftとMinecraftサーバーソフトウェアは、Java 16以上が必要です。Oracleはライセンスを変更しており、もはやOracleからJavaを入手する説得力のある理由はありません。推奨されるベンダーはAmazon CorrettoAdoptiumです。OpenJ9やGraalVMなどの代替JVMも動作しますが、これらはPaper媒体ではサポートされておらず、問題が発生することが知られているため、現在は推奨されていません。

ガベージコレクタは、大きなガベージコレクタタスクによって引き起こされるラグスパイクを減らすように設定することができます。Minecraft サーバー用に最適化されたスタートアップフラグはSOGで見つけることができます。この推奨事項は他のjvmでは機能しないことに注意してください。

Linux CPU スケーリング

ホストによっては、「PowerSave」モードで動作するマシンを使用している場合があります。この場合、クロック速度が25%近く低下し、シングルスレッドのパフォーマンスが大幅に低下します。これは、CPUスケーリングをパフォーマンスモードに設定するよりも、はるかに悪いパフォーマンスにつながる可能性があります。VPSでは利用できない場合がありますのでご注意ください。

Debian / Ubuntuの場合

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor CPUのパフォーマンスプロファイルを表示します。

echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorプロファイルを performance に設定します。

"Too good to be true "なプラグイン

地面に落ちてるアイテムを消すプラグイン

merge radiusやalt-item-despawn-rateで代用できますし、正直、基本的なサーバー設定よりも設定範囲が狭いので、絶対に不要です。アイテムを削除しないよりも、アイテムをスキャンして削除する方がリソースを消費する傾向があります。

モブスタッカープラグイン

使うことを正当化するのはとても難しいです。自然に発生したエンティティをスタックすると、サーバーが常により多くのmobを発生させようとするため、スタックしない場合よりもラグが発生します。唯一の「許容できる」使用例は、大量のスポナーがあるサーバーのスポナー用です。

プラグインによる他のプラグインの有効化/無効化

実行時にプラグインを有効にしたり無効にしたりするものは非常に危険です。そのようなプラグインを読み込むと、トラッキングデータに関する致命的なエラーが発生する可能性があり、プラグインを無効にすると、依存関係がなくなることによるエラーが発生する可能性があります。/reloadコマンドにも全く同じ問題があります。

何が遅れているのか?- 性能測定

mspt

Paperには/msptコマンドがあり、サーバーが最近のtickを計算するのにかかった時間を知ることができます。最初の値と2番目の値が50より小さければ、おめでとうございます。あなたのサーバーは遅れていません。3つ目の値が50を超えていれば、少なくとも1回は時間のかかったtickがあったことを意味します。これは全く普通のことで、時々起こることですので、慌てないでください。

timings

サーバーが遅延しているときに何が起こっているかを確認するには、Timingsが最適です。timingsは、どのタスクに最も時間がかかっているかを正確に把握するためのツールです。これは最も基本的なトラブルシューティングツールであり、ラグに関してヘルプを求めたら、ほとんどの場合にtimingsを求められるでしょう。

サーバーのtimingsを取得するには、/timings pasteコマンドを実行し、表示されたリンクをクリックするだけです。このリンクを他の人と共有すれば、助けてもらうことができます。また、何をしているのかわからないと、誤読してしまいがちです。読み方については、Aikar氏による詳細なビデオチュートリアルがあります。

Spark

Sparkは、サーバーのCPUやメモリの使用状況をプロファイリングすることができるプラグインです。使い方はwikiに載っています。また、ラグスパイクの原因を見つける方法については、こちらのガイドがあります。