optimization-guide
このガイドはYouHaveTrouble/minecraft-optimizationの日本語訳です。日本語訳は適当であるため、適時原文を確認することを推奨します。
本ガイドによって生じたあらゆる問題について責任を負いません。
Vanilla、Fabric、Spigot(またはPaperより下流のバージョン)をお使いの方は、server.properties
を開き、sync-chunk-writes
をfalse
に変更してください。このオプションは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
チャンク
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-discovered
がfalse
になっている場合のパフォーマンスが向上しますが、構造物が実際にはマップ上でマークされた場所にないなど、予期しない動作が発生する可能性があります。問題がないようであれば、これを変更してください。
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-jump
をpaper.yml
でtrue
に変更することで、水の中でジャンプするようになります。
paper.yml
despawn-ranges
設定値:
soft: 30
hard: 56
エンティティのデスポーン範囲(ブロック単位)を調整できます。これらの値を低くすると、プレイヤーから遠くにいるMobをより早く消すことができます。softは30程 度にして、hardはview-distanceより少し大きめに調整すると、チャンクが読み込まれているポイントをプレイヤーが超えたときに、Mobがすぐにデスポーンしないようになります(paper.yml
のdelay-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.yml
のlagging-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 CorrettoとAdoptiumです。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に載っています。また、ラグスパイクの原因を見つける方法については、こちらのガイドがあります。