Přejít na hlavní obsah

Jak optimalizovat Minecraft server pomocí Spark (Návod)

Optimalizujete Minecraft server podle informací ze Spark profilu. Naučíte se Spark používat, číst report a zlepšíte TPS, až uvidíte, co vám žere výkon.

Skin autora Tomáš NavrátilTomáš Navrátil

Spark ukáže, proč server nestíhá tick. Od Paperu 1.21 je Spark součástí serveru, samostatný jar do plugins/ nedávejte. Na Fabricu, Forge a NeoForge ho stáhnete, dáte do mods/ a po restartu používáte stejné příkazy.

Profilujte ve chvíli, kdy server opravdu laguje. Prázdný server ukáže, že je v klidu. Příčinu sekání z něj nepoznáte.

Rychlý přehled

  1. Otevřete záložku Konzole.
  2. Na Paperu od verze 1.21 zadejte spark. Soubor spark.jar v plugins/ nehledejte.
  3. Až server laguje, spusťte spark profiler start --timeout 30.
  4. Otevřete odkaz https://spark.lucko.me/....
  5. Nejdřív otevřete záložku World a podívejte se na počty entit.
  6. Pak čtěte TPS, MSPT, CPU (process) a strom Server thread.
  7. Na Fabricu, Forge a NeoForge stáhněte jar z webu Spark nebo z Modrinthu, vložte ho do mods/ a server restartujte.

Oficiální postup Paperu je v dokumentaci Paperu.

1. Ověřte Spark v konzoli

Server musí běžet. Otevřete záložku Konzole. Příkazy pište do pole Napište příkaz a stiskněte Enter… bez úvodního lomítka.

Zadejte plugins. Výpis Server Plugins (0) znamená, že v plugins/ není žádný jar. Spark přesto funguje: od Paperu 1.21 je zabudovaný do serveru. Samostatný spark.jar sem nedávejte. Dva Spark vedle sebe se perou o stejné příkazy.

Výpis plugins v konzoli: Server Plugins (0), Spark je vestavěný

Zadejte spark a spark help. Uvidíte verzi a seznam příkazů. Spark v nápovědě píše lomítko (/spark tps). Do konzole ho nepíšte.

Výstup spark help v konzoli

Rychlý stav bez reportu:

spark tps

2. Spusťte profiler, až server laguje

Dokumentace Paperu ukazuje /spark profiler start --timeout 600. To je 10 minut. Na první měření stačí 30 až 60 sekund, ale jen když lag právě probíhá.

Zadejte:

spark profiler start --timeout 30

Konzole napíše, že profiler běží na pozadí a výsledek vrátí po 30 sekundách. Chcete skončit dřív, zadejte spark profiler stop.

Příkaz spark profiler start --timeout 30 v konzoli

3. Otevřete report

Až čas vyprší, konzole vypíše odkaz ve tvaru https://spark.lucko.me/.... Otevřete ho v prohlížeči. Odkaz po čase přestane fungovat, proto si ho uložte, jen dokud ho čtete.

Odkaz na Spark report spark.lucko.me v konzoli

4. Nejdřív počty entit

V reportu klikněte na ikonu i nahoře a otevřete záložku World. Tady je přehled, kolik entit server drží a v jakém světě. To je nejrychlejší kontrola, jestli lag nedělají mobové, předměty na zemi nebo jedna přecpaná farma.

Hledejte svět nebo typ entity, kde číslo skáče do stovek a tisíců. Vpravo uvidíte regiony a chunky s nejvyšším počtem. Chunk má 16 na 16 bloků, souřadnice spočítáte jako číslo chunku krát 16.

Záložka World ve Spark reportu s počty entit

5. TPS, MSPT, CPU a paměť

V hlavičce reportu čtěte čísla v tomto pořadí.

1. TPS. Zdravý server drží 20. Pod přibližně 18 hráči cítí lag.

2. MSPT. Jeden tick má 50 ms. Medián MSPT musí zůstat pod 50 ms. Vysoký medián znamená, že tick je přetížený, i když průměrné TPS ještě chvíli drží 20.

3. CPU (process). Zátěž procesu Minecraftu. CPU (system) je celý stroj. Vysoké system a nízké process znamená, že tick nežere hra, ale něco vedle ní.

4. Memory (process). Paměť procesu. Sama o sobě lag nedokazuje.

5. Server thread. Kořen stromu. Tady uvidíte, co žere tick: entity, chunky, pluginy.

Hlavička Spark reportu: TPS, MSPT, CPU a paměť

6. Strom Server thread

Rozbalte Server thread. Hledejte větve s vysokým procentem: entity, načítání chunků, konkrétní plugin.

Na prázdném serveru skoro celý čas sedí v čekání (recordTaskExecutionTimeWhileWaiting) a processPacketsAndTick má zlomky procenta. Server je v klidu. Na serveru, který laguje, je processPacketsAndTick tlustý a pod ním uvidíte konkrétní žrouty.

Rozbalený strom Server thread v Spark reportu

7. Seznam metod (Flat)

Přepněte pohled Flat. Seznam seřadí metody, které berou nejvíc času. Když nahoře opakujete název jednoho pluginu, ten plugin nejdřív vypněte a profil zopakujte.

Pohled Flat ve Spark reportu s nejdražšími metodami

8. Co s výsledkem

Entity drží strom nebo záložku World. Snižte počet mobů a předmětů na zemi, zmenšete view-distance a ohraničte svět worldborderem. Nové chunky přestaňte generovat za běhu. Předgenerujte je Chunky.

Plugin drží strom. Ten plugin vypněte a profil zopakujte. Když lag zmizí, hledejte novější verzi nebo náhradu. Nesbírejte pluginy pro jistotu.

Paměť skáče a pořád je plná. Server nestíhá úklid. Přidejte RAM k plánu, nebo uberete svět a pluginy. Spark vám neřekne přesné číslo gigabajtů. Řekne, že problém je v paměti.

CPU (system) je vysoko a process nízko. Na stroji běží něco mimo Minecraft. To nevyřešíte dalším pluginem.

Po každé změně spusťte nový profil pod stejnou zátěží. Porovnávejte medián MSPT, ne jen TPS.

9. Fabric, Forge a NeoForge

Na Fabricu, Forge a NeoForge Spark v serveru není. Stáhněte jar pro Fabric, Forge nebo NeoForge z spark.lucko.me/download nebo z Modrinthu. Na webu Spark je přímo napsáno, že Paper od verze 1.21 plugin nepotřebuje.

Oficiální stažení Spark: Fabric, Forge, NeoForge a Paper

Na Modrinthu otevřete záložku Versions a filtrujte Fabric nebo Forge.

Verze Spark na Modrinthu filtrované na Fabric a Forge

Soubor dejte do mods/. Server restartujte. Příkazy v konzoli jsou stejné: spark, spark tps, spark profiler start --timeout 30. Nový server kvůli Sparku nezakládejte.

Časté problémy

Příkaz spark neexistuje

Na Paperu od verze 1.21 zadejte spark bez lomítka a bez spark.jar v plugins/. Na starším Paperu, Spigotu, Fabricu nebo Forge chybí jar v plugins/ nebo mods/, nebo jste po nahrání nerestartovali.

Dva Spark najednou

Do plugins/ jste dali samostatný jar, i když Paper Spark už má v sobě. Odstraňte extra spark.jar a restartujte. Jinak se příkazy dublují a reporty jsou k ničemu.

Report vypadá v pořádku, hráči ale sekají

Profil jste spustili na prázdném serveru. Spusťte ho znovu, až je na serveru stejný počet hráčů a stejná aktivita jako při lagu.

Profiler běží příliš dlouho

--timeout 600 je 10 minut. Na první měření použijte 30 až 60 s, nebo spark profiler stop.

Zpět na Snížení lagu