Server, který „seká“, většinou netrpí nedostatkem hardwaru, ale jednou konkrétní příčinou: příliš velkou vzdáleností simulace, generováním nového terénu, přeplněnou farmou nebo špatně napsaným pluginem. Ukážeme, jak lag změřit, najít jeho příčinu a opravit ji – od rychlých úprav po nastavení Paperu a profilování.
Co budete potřebovat
- Minecraft server u StormHostu (Paper nebo Purpur doporučujeme; část návodu platí i pro Fabric a NeoForge)
- Přístup do záložek Konzole, Nastavení serveru, Spuštění a Soubory
- Záloha serveru před úpravou konfigurace (návod)
- Asi 40 minut
Jak poznat, co laguje#
Minecraft server počítá hru v ticích. Za sekundu jich má stihnout 20, na jeden tick má tedy 50 milisekund. Dvě čísla, která potřebujete znát:
| Hodnota | Co znamená | Dobře | Problém |
|---|---|---|---|
| TPS (ticks per second) | Kolik ticků server za sekundu skutečně stihne. | 20 | Pod 19 hráči cítí zpomalení, pod 15 je hra nepříjemná. |
| MSPT (milliseconds per tick) | Kolik milisekund trvá jeden tick. | Pod 50 ms, ideálně pod 35 ms | Nad 50 ms server nestíhá a TPS klesá. |
MSPT je přesnější ukazatel: server s MSPT 45 ms má pořád TPS 20, ale nemá žádnou rezervu. Když MSPT přeleze 50 ms, TPS začne klesat.
Hodnoty zjistíte v Konzoli (příkazy píšete bez lomítka):
tps
mspt
spark tpstps– průměrné TPS za poslední 1, 5 a 15 minut (Paper, Purpur).mspt– průměrný, nejkratší a nejdelší čas ticku (Paper, Purpur).spark tps– TPS, MSPT (minimum, medián, 95. percentil, maximum) a vytížení procesoru. Funguje všude, kde je spark (Paper ho má vestavěný).
Když server nestíhá dlouhodobě, objeví se v konzoli:
Can't keep up! Is the server overloaded? Running 2500ms or 50 ticks behindServer tím říká, že je 2,5 sekundy (50 ticků) pozadu a ticky přeskočí. Jedna hláška při startu nebo při generování terénu nevadí. Pokud se opakuje každých pár minut, pokračujte tímto návodem.
Lag serveru, nebo něco jiného?#
| Co hráč vidí | Příčina | Kde hledat |
|---|---|---|
| Bloky se po vybourání vracejí, mobové se zasekávají, všichni hráči mají stejný problém | Lag serveru (nízké TPS) | Tento návod |
| Nízké FPS, trhaný obraz, ale ostatní hráči jsou v pořádku | Výkon počítače hráče | Nastavení grafiky ve hře, módy pro klienta |
| Hráč „teleportuje“ zpět, vysoký ping jen u něj | Připojení hráče | Ping hráče příkazem spark ping --player <NICK> |
| Server je v pořádku, ale nové oblasti se načítají pomalu | Generování terénu | Předgenerování s Chunky |
Rychlé výhry#
Seřazeno od největšího účinku k menšímu. Většinu zvládnete do deseti minut.
| Pořadí | Krok | Proč pomůže | Kde |
|---|---|---|---|
| 1 | Používejte Paper nebo Purpur místo Vanilly | Paper obsahuje stovky optimalizací a opravy chyb, se kterými Vanilla nepočítá. | Záložka Software, viz Typy serverů |
| 2 | Předgenerujte svět a nastavte jeho okraj | Generování nového terénu je nejnáročnější operace serveru. | Chunky |
| 3 | Snižte simulation-distance na 6–8 a view-distance na 8 | Méně chunků na hráče = méně práce v každém ticku. | View a simulation distance |
| 4 | Najděte příčinu profilerem | Ukáže konkrétní plugin, farmu nebo entitu. | spark |
| 5 | Omezte entity a farmy | Stovky zvířat v jedné ohradě nebo přeplněná farma zabijí TPS. | Nastavení Paperu |
| 6 | Ponechte výchozí spouštěcí flagy | Výchozí preset je vyladěný na velikost vaší paměti. | Spouštěcí flagy |
| 7 | Aktualizujte server, pluginy a módy | Nové verze často opravují úniky paměti a pomalé části kódu. | Záložka Software a Pluginy |
Pluginy na „čištění lagu“
Pluginy, které slibují zázračné zrychlení (pravidelné mazání předmětů na zemi, „vyčištění RAM“, vynucené volání garbage collectoru), problém neřeší. Mažou hráčům věci, často způsobují sekání a příčinu jen schovají. Najděte skutečnou příčinu přes spark.
Spouštěcí flagy a paměť#
Flagy jsou parametry, se kterými se spouští Java. Určují velikost paměti pro hru (halda, heap), stropy paměti mimo haldu a chování garbage collectoru, který z paměti uklízí nepotřebná data. V zákaznické zóně je najdete v záložce Spuštění, v části Spouštěcí parametry.
Haldu a stropy počítá zákaznická zóna sama podle velikosti balíčku, typu serveru, verze Javy a počtu pluginů nebo módů. Přepočítá je při založení serveru, po změně balíčku, po změně typu nebo verze a před startem z portálu, když se od minula něco z toho změnilo. Spouštěcí příkaz, který jste upravili ručně v panelu nebo nastavili jako vlastní, nepřepisuje. Když má takový příkaz haldu větší, než menší balíček unese, server po změně balíčku nespustíme (hned by spadl) a napíšeme vám e-mail.
| Volba | Co dělá | Kdy použít |
|---|---|---|
| Preset – Doporučené (G1) | Garbage collector G1 s nastavením podle dokumentace Paperu. Výchozí pro všechny typy serverů. | Většina serverů. |
| Preset – Nízké pauzy (ZGC) | Garbage collector s velmi krátkými pauzami za cenu vyššího vytížení procesoru. Jen Java 21 a novější. | Velké servery od 16 GB, když spark gc ukazuje dlouhé pauzy a procesor má rezervu. |
| Preset – Proxy | Flagy pro Velocity a BungeeCord. | Nabízí se jen u proxy serverů. |
| Preset – Bez ladění | Jen velikost haldy a paměťové stropy. | Dočasně při hledání chyby, zda ji nezpůsobují flagy. |
| Vlastní parametry | Doplňkové parametry. Povolené jsou jen -XX:…, -D…=… a --add-modules=…, nejvýš 30. Haldu nastavit nejde. Strop síťových bufferů (-XX:MaxDirectMemorySize), zkompilovaného kódu (-XX:) a načtených tříd (-XX:MaxMetaspaceSize) ano, halda se pak přepočítá. | Když vám návod pluginu nebo módu řekne o konkrétní -D vlastnost, nebo když plugin pro hlasový chat potřebuje víc síťových bufferů. |
Všechny presety mají stejné pojistky: strop síťových bufferů, zkompilovaného kódu a načtených tříd, MALLOC_ARENA_MAX=2 (méně paměťových arén alokátoru) a od Javy 17 -XX: (vrací nevyužitou paměť systému). Purpur navíc automaticky dostane --add-modules= (rychlejší výpočty, které Purpur umí využít).
Tlačítka v této části:
- Uložit – nastavení se použije při dalším startu.
- Uložit a restartovat – server se hned restartuje. Když s novými flagy nenastartuje, zákaznická zóna je sama vrátí a uvidíte hlášku
Flagy nejsou kompatibilní, vráceno na předchozí nastavení. - Vrátit předchozí – vrátí poslední funkční nastavení.
- Použít doporučené – objeví se, když je halda na balíček moc velká nebo spouštěcí příkaz nemá stropy paměti. Nastaví doporučený příkaz.
- Přepočítat teď – přepočítá flagy hned, nemusíte čekat na další start z portálu.
Pod volbou Rozpad paměti uvidíte, kolik dostane halda a kolik zbývá pro ostatní části. Po automatickém přepočtu zákaznická zóna ukáže například Startup jsme upravili podle nové velikosti RAM: halda 8,2 → 9,6 GB.
Server mimo StormHost? Startovací skript se stejným výpočtem pro Docker, Linux i Windows vytvoří Generátor startovacího skriptu.
Proč halda není celá RAM#
Halda (-Xmx) sama sebe nepřeroste. Roste paměť mimo haldu: síťové buffery, načtené třídy pluginů a módů, zkompilovaný kód, vlákna a alokátor systému. Nejvíc síťové buffery – bez stropu smí narůst až do velikosti haldy, takže server s haldou 6 GB může skončit na 12 GB.
Kontejner serveru má tvrdý limit o 5 % vyšší než balíček (u balíčků do 4 GB o 10 %, do 2 GB o 15 %) a nemá swap. Když proces limit překročí, systém ho ukončí. V Konzoli se objeví Out of memory: true, v logu serveru žádná chyba není.
Proto má každá velká část mimo haldu strop, všechno se sečte s rezervou pod velikost balíčku a halda dostane zbytek. Když některá část narazí na strop, server místo tichého pádu zapíše do logu chybu (OutOfMemoryError: Direct buffer memory nebo Metaspace), podle které se dá najít viník.
| Paměť balíčku | Halda (Paper, 20 pluginů) | Halda (modpack, 200 módů) | Limit kontejneru |
|---|---|---|---|
| 10 GB | 7 872 MB | 7 040 MB | 10 752 MB |
| 12 GB | 9 792 MB | 8 896 MB | 12 902 MB |
| 16 GB | 13 504 MB | 12 672 MB | 17 203 MB |
| 24 GB | 21 056 MB | 20 224 MB | 25 805 MB |
Halda má minimální i maximální velikost stejnou (-Xms = -Xmx) a zabere se hned při startu. Graf paměti v panelu proto ukazuje vysoké číslo od začátku. Panel navíc počítá i mezipaměť souborů světa, kterou systém v případě potřeby uvolní. Číslo blízko limitu samo o sobě pád neznamená.
Dokumentace Paperu doporučuje na serveru aspoň 6–10 GB haldy bez ohledu na počet hráčů a varuje, že víc paměti nad určitou mez výkon nezvýší.
Kdy je čas na větší balíček
Pokud spark health ukazuje haldu trvale přes 90 % i po úklidu (spark gc hlásí časté a dlouhé pauzy), a přitom jste vyloučili úniky paměti v pluginech, server potřebuje víc paměti. Větší balíček nastavíte v záložce Změna balíčku (návod). Flagy se po upgradu přepočítají samy, projeví se při dalším startu.
View a simulation distance#
Svět je rozdělený na chunky (sloupce 16 × 16 bloků). Server kolem každého hráče drží načtené chunky v určitém okruhu:
view-distance– kolik chunků kolem hráče server posílá do hry (co hráč vidí). Ovlivňuje hlavně paměť a síť.simulation-distance– v jakém okruhu chunky „žijí“: pohybují se mobové, roste obilí, funguje redstone a farmy. Ovlivňuje hlavně procesor, tedy TPS.
Počet chunků roste s druhou mocninou vzdálenosti. Při view-distance=10 drží server kolem každého hráče 441 chunků, při 8 jen 289 (o třetinu méně). U simulace je efekt stejný.
| Situace | view-distance | simulation-distance |
|---|---|---|
| Malý server s kamarády, bez lagu | 10 | 10 |
| Veřejný survival, 20+ hráčů | 8–10 | 6–8 |
| Server laguje a nevíte proč | 8 | 6 |
| Minihry, lobby | 6–8 | 4–6 |
Nastavíte je v záložce Nastavení serveru ve skupině Svět (všechna nastavení). Simulaci pod 5 nedoporučujeme – větší farmy pak přestanou fungovat, protože část farmy je mimo simulovanou oblast.
Paper a jednotlivé světy
Na Paperu jde vzdálenosti nastavit i pro každý svět zvlášť v souboru spigot.yml (world-settings › default › view-distance a simulation-distance). Hodnota default znamená „použij server.properties“.
Nastavení Paperu#
Paper a Purpur mají vlastní konfiguraci ve složce config:
| Soubor | Co obsahuje |
|---|---|
config/paper-global.yml | Nastavení celého serveru (proxy, načítání chunků, limity spamu). |
config/ | Výchozí nastavení pro všechny světy. Tady se ladí výkon. |
world/ | Výjimky pro jednu dimenzi (od verze 26.1; <dimenze> je overworld, the_nether nebo the_end). Ve starších verzích soubor paper-world.yml ve složce světa, například world_. |
Upravujte vždy paper-world-defaults.yml. Soubor otevřete v záložce Soubory v editoru, najděte existující sekci (například chunks:) a změňte hodnotu v ní. Nevkládejte stejnou sekci podruhé – duplicitní klíč server buď odmítne načíst, nebo použije jen jeden z nich a vaše změna se neprojeví.
Pravidla YAML
Odsazení jen mezerami (nikdy tabulátorem), stejné odsazení na stejné úrovni, za dvojtečkou mezera. Před úpravou udělejte zálohu. Po úpravě server restartujte – příkaz paper reload nedoporučujeme, některé hodnoty se načítají jen při startu.
Vybraná nastavení s největším vlivem na výkon:
| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
chunks. | Nepustí hráče do chunku, který ještě není načtený (rychlé létání na elytře, jízda vozíkem). Server pak nemusí načítat chunky „na sílu“ uprostřed ticku. | true | Výchozí false. Zapněte na serverech s elytrami a rychlým cestováním. |
chunks. | Kolik entit daného typu se v jednom chunku uloží. Chrání před chunky zahlcenými tisíci šípy nebo zkušenostmi. | arrow: 16, experience_orb: 16, snowball: 8, ender_pearl: 8, fireball: 8, small_fireball: 8 | Výchozí bez limitu (-1). Nedávejte sem zvířata ani moby – zbytek by při uložení zmizel. |
collisions. | Po kolika kolizích entita přestane počítat další srážky. | 2 | Výchozí 8. Nižší hodnota výrazně uleví místům, kde se mačká mnoho mobů. Mobové v davu se pak méně odstrkují – pokud tím přestane fungovat některá farma, vraťte hodnotu výš. |
environment. | Zrychlí výpočet výbuchů (TNT, creepeři). | true | Výchozí false. Zapněte vždy, výsledek výbuchu se nemění. |
misc. | Způsob výpočtu redstonu: VANILLA, EIGENCRAFT, ALTERNATE_CURRENT. | ALTERNATE_CURRENT | Výchozí VANILLA. Alternativní výpočet výrazně ulehčí redstonovému prachu, ale v málo případech změní chování obvodů závislých na pořadí aktualizací. Hráčům s technickými stavbami to oznamte. |
hopper. | Vypne událost pro pluginy při každém přesunu předmětu hopperem. | false | true jen tehdy, když žádný plugin přesuny hopperů nehlídá (ochrany truhel, filtry). Jinak by ochrany přestaly fungovat. |
tick-rates.mob-spawner | Jak často (v ticích) spawnery mobů kontrolují okolí a spawnují. | 2 | Výchozí 1. Spawner se kontroluje jen každý druhý tick. Paper mu přitom odpočítává čekací dobu rychleji, takže moby spawnuje přibližně stejně často. -1 vypne všechny spawnery. |
tick-rates.grass-spread | Jak často (v ticích) se server pokouší rozšířit trávu. | 4 | Výchozí 1. Tráva se šíří pomaleji, hráči to obvykle nepoznají. |
entities. | Vzdálenost od hráče, kde mobové náhodně (soft) nebo okamžitě (hard) mizí. Vanilla: 32 a 128 bloků. | Například monster: soft: 30, hard: 72 | Na přeplněných serverech. Menší hard uvolní místo pro nové moby blíž hráčům. |
environment. | Mapy pokladů od vesničanů a z truhel. Hledání nejbližší stavby je velmi náročné. | true | false, když spark ukazuje lag při obchodování s kartografy nebo otevírání truhel. |
entities. | Jestli stojany na brnění tikají (fyzika, gravitace). | true | false na serverech s tisíci dekoračních stojanů. Stojany pak nepadají a některé pluginy s nimi nemusí fungovat. |
Ukázka, jak úpravy v souboru vypadají (jen změněné části, ostatní řádky souboru ponechte):
chunks:
entity-per-chunk-save-limit:
arrow: 16
experience_orb: 16
snowball: 8
ender_pearl: 8
prevent-moving-into-unloaded-chunks: true
collisions:
max-entity-collisions: 2
entities:
spawning:
despawn-ranges:
monster:
hard: 72
soft: 30
environment:
optimize-explosions: true
misc:
redstone-implementation: ALTERNATE_CURRENT
tick-rates:
grass-spread: 4
mob-spawner: 2spigot.yml a bukkit.yml#
Paper čte i starší konfigurační soubory spigot.yml a bukkit.yml v hlavní složce serveru.
spigot.yml#
Všechna nastavení jsou v sekci world-settings › default.
| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
entity-activation-range. | V jaké vzdálenosti (bloky) od hráče zvířata plně tikají. Dál tikají jen občas. | 16–24 | Výchozí 32. Snižte na serverech s velkými ohradami zvířat. |
entity-activation-range. | Totéž pro příšery. | 24 | Výchozí 32. |
entity-activation-range. | Totéž pro vesničany. | 16 | Výchozí 32. Vesničané patří k nejnáročnějším entitám. Příliš nízká hodnota zpomalí jejich farmy. |
entity-activation-range. | Ostatní entity (předměty na zemi, vozíky). | 8–12 | Výchozí 16. |
entity-activation-range. | Nájezdníci. | 48 | Výchozí 64. Moc nízká hodnota rozbije nájezdy (raidy). |
merge-radius.item | Do jaké vzdálenosti (bloky) se slučují stejné předměty na zemi. | 2.5 | Výchozí 0.5. Větší hodnota = méně entit na zemi. |
merge-radius.exp | Totéž pro kuličky zkušeností. -1 = chování Vanilly. | 3.0 | Výchozí -1. |
nerf-spawner-mobs | Mobové ze spawneru nemají umělou inteligenci (nechodí, neútočí). | true | Výchozí false. Ušetří výkon na XP farmách, ale moby ze spawneru pak neútočí – oznamte to hráčům. |
ticks-per. | Po kolika ticích hopper přesune předmět. | 8 | Výchozí je 8 (Vanilla). Vyšší hodnota zpomalí všechny hoppery – mění chování redstonových hodin. |
bukkit.yml#
| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
spawn-limits.monsters | Maximální počet příšer (na hráče, pokud je v Paperu zapnuté per-player-mob-spawns). | 50 | Výchozí 70. Méně příšer = méně výpočtů. |
spawn-limits.animals | Maximální počet zvířat, která se objeví sama. | 8 | Výchozí 10. |
spawn-limits., water-ambient, ambient | Ryby, chobotnice, netopýři. | 3, 10, 5 | Výchozí 5, 20, 15. |
ticks-per.monster-spawns | Po kolika ticích server zkouší spawnovat příšery. | 2 | Výchozí 1. |
ticks-per.autosave | Po kolika ticích se ukládá celý svět (6 000 = 5 minut). | 6000 | Neměňte. Paper ukládá chunky průběžně. |
Předgenerování světa s Chunky#
Když hráč dojde do místa, kde ještě nikdo nebyl, server musí terén vygenerovat. Je to nejnáročnější operace vůbec: jeden hráč na elytře dokáže srazit TPS celého serveru. Řešení je terén vygenerovat předem a okraj světa nastavit tak, aby hráči mimo připravenou oblast nemohli.
Plugin Chunky vygeneruje terén na pozadí, postupně a s možností přerušení. Existuje pro Paper, Purpur, Folia i jako mód pro Fabric, Forge a NeoForge.
Nainstalujte Chunky v záložce Pluginy (u módů Módy) › Procházet, vyhledejte
Chunkya klikněte na Instalovat. Pak server restartujte (návod na pluginy).V Konzoli nastavte střed okraje světa:
text worldborder center 0 0worldborder center– nastaví střed okraje světa.0 0– souřadnice X a Z středu. Obvykle střed světa, případně souřadnice spawnu.
Nastavte velikost okraje:
text worldborder set 10000worldborder set– nastaví velikost okraje.10000– průměr v blocích. Svět bude 10 000 × 10 000 bloků, tedy 5 000 bloků od středu na každou stranu.
Převezměte okraj do Chunky:
text chunky worldborderChunky si nastaví střed a poloměr podle okraje světa.
Spusťte generování:
text chunky startV konzoli pravidelně uvidíte průběh v procentech, počet vygenerovaných chunků a odhad zbývajícího času.
Další příkazy:
| Příkaz | Co dělá |
|---|---|
chunky pause | Pozastaví generování a uloží postup. Hodí se, když se připojí hodně hráčů. |
chunky continue | Pokračuje v pozastaveném generování. |
chunky cancel | Zruší úlohu. Vygenerované chunky zůstanou. |
chunky progress | Vypíše průběh (užitečné ve hře). |
chunky silent | Vypne nebo zapne průběžné zprávy v konzoli. |
chunky start world square 0 0 5000 | Spustí generování bez okraje světa: svět world, tvar čtverec, střed 0 0, poloměr 5 000 bloků. |
chunky world | Vybere svět. Ve hře bez názvu vybere svět, ve kterém stojíte. |
Nether a End#
Nether je osmkrát menší než Overworld (1 blok v Netheru = 8 bloků v Overworldu). Pro okraj o průměru 10 000 bloků v Overworldu (poloměr 5 000) stačí v Netheru poloměr 625 bloků. Připojte se do hry, přejděte do Netheru a v chatu zadejte:
/chunky world
/chunky center 0 0
/chunky radius 625
/chunky start/chunky world– bez názvu vybere svět, ve kterém právě jste (Nether)./chunky center 0 0– střed generování./chunky radius 625– poloměr v blocích./chunky start– spustí generování.
Okraj světa v Netheru (/worldborder set 1250 zadaný v Netheru) nastavte jen na Paperu, Purpuru a od verze 1.21.9 i jinde – teprve od této verze má každá dimenze vlastní okraj. Ve starších verzích Vanilly, Fabricu a NeoForge by příkaz změnil okraj i v Overworldu.
End stačí generovat menší (například poloměr 2 000–3 000 bloků), hráči se v něm pohybují hlavně kolem ostrovů.
Disk a procesor
Předgenerovaný svět zabírá místo na disku – čím větší okraj, tím víc. Začněte menším průměrem (5 000–10 000 bloků) a sledujte volné místo v záložce Soubory nebo v ukazateli disku v Konzoli. Generování vytíží procesor naplno: spouštějte ho, když je na serveru málo hráčů, nebo ho mezitím pozastavte příkazem chunky pause.
Po restartu serveru generování nepokračuje samo. Navažte příkazem chunky continue (nebo v plugins/ nastavte continue-on-restart: true).
Diagnostika se spark#
spark je profiler: během provozu zaznamenává, co server dělá, a výsledek ukáže jako přehledný strom s procenty. Paper ho má od verze 1.21 vestavěný (Purpur také), na Fabricu a NeoForge si nainstalujte mód spark z Modrinthu. Na proxy Velocity se příkaz jmenuje sparkv.
Rychlý přehled#
| Příkaz (v konzoli) | Co ukáže |
|---|---|
spark tps | TPS za posledních 5 s, 10 s, 1 min, 5 min a 15 min, časy ticků a vytížení procesoru. Hodnoty obarví zeleně, oranžově nebo červeně podle toho, jak jsou dobré. |
spark health | Odkaz na živý přehled: TPS, MSPT, procesor, paměť, disk. Aktualizuje se každých 10 sekund. |
spark gc | Historie garbage collectoru: kolikrát a jak dlouho uklízel paměť. |
spark ping | Průměrný ping hráčů. S --player <NICK> ping jednoho hráče. |
spark tickmonitor --threshold-tick 50 | Hlídá ticky delší než 50 ms a každý vypíše. Opakovaným zadáním spark tickmonitor hlídání vypnete. |
Profilování krok za krokem#
Počkejte, až server laguje (nebo až je na něm běžný počet hráčů). Profil prázdného serveru nic neukáže.
V Konzoli spusťte profiler na 10 minut:
text spark profiler start --timeout 600spark profiler start– spustí profiler.--timeout 600– po 600 sekundách (10 minut) ho sám zastaví a nahraje výsledek.
Počkejte 10 minut. V konzoli se objeví odkaz na profil (
spark.lucko.me/…).Odkaz vložte do Analýzy Spark profilu. Ukáže, co server zpomaluje a co změnit.
Profil nemusíte nahrávat: s volbou --save-to-file (například spark profiler start --timeout 600 --save-to-file) ho spark uloží jako soubor .sparkprofile do složky plugins/spark (na Fabricu a NeoForge config/spark). Stáhněte ho v záložce Soubory a nahrajte do analýzy.
Když chcete profiler ukončit dřív, zadejte spark profiler stop. Na krátké výkyvy (server občas na sekundu „zamrzne“) použijte:
spark profiler start --only-ticks-over 100--only-ticks-over 100– zaznamená jen ticky delší než 100 ms. Vyfiltruje běžný provoz a zůstanou jen „laggy“ ticky. Hodnotu volte mezi 50 a 100.
Jak číst výsledek#
Když chcete strom projít sami, otevřete odkaz na profil v prohlížeči:
- V seznamu vláken rozbalte Server thread – hlavní vlákno hry. Problémy jiných vláken (načítání chunků, síť) jsou méně časté.
- Klikáním rozbalujte uzly a sledujte procenta. Jděte vždy cestou s nejvyšším podílem.
- Čas strávený ve
Thread.sleep()nebo „parked“ je v pořádku – server čeká na další tick, protože má rezervu. - Typické nálezy:
| V profilu uvidíte | Co to znamená | Co udělat |
|---|---|---|
Velký podíl u tickEntities nebo entit (Villager, Zombie …) | Příliš mnoho entit. | entity-activation-range, limity spawnu, prohlédnout farmy (viz Kolik entit je na serveru). |
| Velký podíl u generování chunků | Hráči objevují nový terén. | Chunky a okraj světa. |
Název balíčku pluginu (například com.example.plugin) | Konkrétní plugin. | Aktualizovat, nastavit, nebo nahradit. |
| Redstone, hoppery | Technické stavby. | redstone-implementation, hopper. (opatrně). |
- V horní liště přepněte zobrazení na Sources – ukáže samostatný strom pro každý plugin nebo mód a hned je vidět, který zatěžuje nejvíc.
Odkaz na profil můžete poslat autorovi pluginu nebo naší podpoře. Neobsahuje hesla ani soubory serveru.
Kolik entit je na serveru#
Na Paperu vypíše počty entit podle typu příkaz paper entity list. V konzoli je potřeba uvést i svět:
paper entity list * minecraft:overworld
paper entity list minecraft:villager minecraft:overworldpaper entity list– výpis entit.*– bez filtru, vypíše všechny typy entit s počty (první číslo jsou tikající entity, druhé netikající).minecraft:villager– filtr na jeden typ. Výpis pak ukáže souřadnice chunků, kde je těchto entit nejvíc.minecraft:overworld– svět (minecraft:the_nether,minecraft:the_endpro další dimenze). Ve hře svět uvádět nemusíte, použije se ten, ve kterém stojíte.
Na nalezené místo se pak podívejte ve hře a farmu nebo ohradu zmenšete.
Módy pro výkon (Fabric a NeoForge)#
Fabric a NeoForge nemají optimalizace Paperu, ale existují serverové módy se stejným cílem. Všechny najdete na Modrinthu (v záložce Módy › Procházet):
| Mód | Co dělá | Loader |
|---|---|---|
| Lithium | Optimalizuje fyziku, umělou inteligenci mobů a další části hry beze změny chování. | Fabric, NeoForge |
| FerriteCore | Snižuje spotřebu paměti. | Fabric, Forge, NeoForge |
| ModernFix | Zrychluje start a snižuje spotřebu paměti, hlavně u velkých modpacků. | Fabric, Forge, NeoForge |
| C2ME | Paralelní generování a načítání chunků. Zasahuje hluboko do práce se světem – před nasazením zálohujte. | Fabric |
| spark | Profiler popsaný výše. | Fabric, Forge, NeoForge |
| Chunky | Předgenerování světa. | Fabric, Forge, NeoForge |
Mód vždy vybírejte pro přesnou verzi Minecraftu a loaderu. Podrobně v návodu Módy a modpacky.
Kdy je čas na upgrade#
Upgrade balíčku má smysl, když:
- spark ukazuje, že server je vytížený rovnoměrně (žádný jeden plugin nebo farma nedominuje) a MSPT je trvale nad 40 ms při běžném počtu hráčů,
spark healthukazuje paměť trvale u stropu a garbage collector se nestíhá uklízet,- přidáváte velký modpack nebo plánujete výrazně víc hráčů.
Pokud jeden plugin nebo farma bere většinu času, víc výkonu problém nevyřeší – příčinu je potřeba odstranit.
Ověření#
- Po změnách restartujte server a nechte ho běžet s hráči aspoň 15 minut.
- Zadejte
spark tps. MSPT (medián) by měl být pod 50 ms, ideálně pod 35 ms, a TPS 20. - Hláška
Can't keep up!by se už neměla opakovat. - Při nejistotě spusťte znovu profil na 10 minut a porovnejte ho s předchozím.
Když něco nefunguje#
Server po úpravě konfigurace nenastartuje#
Nejčastěji je chyba v YAML (tabulátor, špatné odsazení, duplicitní sekce). V konzoli hledejte řádek s názvem souboru a číslem řádku. Opravte ho, nebo soubor smažte – Paper ho při startu vytvoří znovu s výchozími hodnotami (vaše úpravy se tím ztratí). Případně obnovte zálohu.
Flagy nejsou kompatibilní, vráceno na předchozí nastavení.#
Server s novými flagy nenastartoval a zákaznická zóna je vrátila. Zkontrolujte vlastní flagy (překlep, flag pro jinou verzi Javy) a zkuste preset bez vlastních flagů.
Server se náhle vypne bez chyby v logu#
Typický příznak překročení paměti. V Konzoli jsou řádky Exit code: 137 a Out of memory: true a zákaznická zóna nad konzolí ukáže Serveru došla paměť a systém ho ukončil. Panel server jednou spustí znovu; když spadne podruhé do minuty, nechá ho vypnutý.
- V záložce Spuštění zkontrolujte upozornění u spouštěcích flagů. Když je halda na balíček moc velká nebo příkaz nemá stropy paměti, klikněte na Použít doporučené.
- Ručně upravený nebo vlastní spouštěcí příkaz zákaznická zóna nepřepisuje. Použijte doporučený preset, nebo nastavte haldu podle tabulky v části Proč halda není celá RAM.
- V logu hledejte
OutOfMemoryError: Direct buffer memoryneboOutOfMemoryError: Metaspace. Ukazují na plugin nebo mód, který plní síťové buffery nebo pořád dokola načítá třídy. - Když pády pokračují i s doporučeným nastavením, hledejte únik paměti:
spark heapsummaryukáže, co zabírá haldu,spark profiler start --alloc --timeout 300co nejvíc paměti přiděluje. Odkaz vložte do Analýzy Spark profilu, nebo ho pošlete naší podpoře.
java.lang.OutOfMemoryError: Java heap space #
Halda je plná. Buď je na serveru víc, než se do paměti vejde (modpack, velký počet hráčů), nebo plugin či mód paměť „ztrácí“ (únik paměti). Pomůže upgrade, nebo nalezení úniku přes spark heapsummary. Další chyby najdete v článku Časté chyby Minecraft serveru.
Chunky hlásí neplatný svět#
Název světa neexistuje. Ve hře použijte /chunky world bez názvu (vybere svět, ve kterém stojíte), nebo v konzoli zadejte název hlavního světa podle level-name (výchozí world).
Po zapnutí ALTERNATE_CURRENT nefunguje redstonová stavba#
Některé obvody spoléhají na pořadí aktualizací Vanilly. Vraťte misc. na VANILLA a server restartujte.
Shrnutí
- Lag měřte příkazy
tps,msptaspark tps: cíl je TPS 20 a MSPT pod 50 ms. - Největší účinek: Paper, předgenerovaný svět s okrajem (Chunky) a rozumná
simulation-distance. - Haldu a stropy paměti nastavuje zákaznická zóna sama podle balíčku. Výchozí preset Doporučené (G1) měňte jen s důvodem.
- Příčinu lagu najde
spark profiler start --timeout 600, odkaz vložte do Analýzy Spark profilu. - Nastavení Paperu měňte v
config/, po záloze a s restartem.paper-world-defaults. yml
Další zdroje#
- Profilování v dokumentaci Paperu (otevře se v novém okně)
- Konfigurace světů Paperu (otevře se v novém okně)
- Konfigurace spigot.yml (otevře se v novém okně)
- Konfigurace bukkit.yml (otevře se v novém okně)
- Aikarovy flagy v dokumentaci Paperu (otevře se v novém okně)
- Příkazy spark (otevře se v novém okně)
- Příkazy Chunky (otevře se v novém okně)