RE:NODE

Provoz12 min čtení

Crash loopy herního serveru: najdi vadný mod

Jak číst crash loop herního serveru, odlišit rozbitý mod od poškozeného savu nebo špatné konfigurace a půlením složky s mody najít vadný soubor za pár startů.

2 čtenáři

Crash loop je server, který nastartuje, spadne a je znovu spuštěn, pořád dokola, a cesta ven je vždy stejná: zastav automatické restarty, najdi první pád, ne ten poslední, zjisti, jestli padá pokaždé na stejném místě, a pak odebírej věci, dokud to nepřestane. Když za to může mod - a na modovaném serveru obvykle může - najdeš ho půlením: vyndej polovinu modů, spusť a půl dál tu polovinu, která problém obsahuje. Čtyřicet modů znamená šest startů. Dvě stě jich znamená osm. To je rychlejší než číst dvě stě changelogů a mnohem rychlejší než vše přeinstalovat, čímž spolu s chybou odstraníš i důkazy.

Tento článek je diagnostická metoda podrobně, se specifiky pro modové systémy, které lidé skutečně používají: pluginy a modpacky pro Minecraft, BepInEx, Oxide a Carbon, SourceMod, resourcy pro FiveM, seznamy modů z Workshopu. Návratové kódy a zabití pro nedostatek paměti - nemodové příčiny restartujícího se serveru - pokrývá proč se tvůj herní server pořád restartuje a tento článek se o něj opírá, místo aby se opakoval.

Nejdřív zastav smyčku#

Smyčka ničí vlastní důkazy. Každý restart posune konzoli, rotuje log a v některých hrách přepíše crash report novějším, který říká míň. Než uděláš cokoli jiného:

  1. Zastav server tlačítkem Stop v panelu, a pokud se pořád vrací, použij Kill.
  2. Vypni všechno, co ho restartuje: plán, nastavení restartu po pádu, watchdog plugin, automatický restart txAdminu u FiveM.
  3. Udělej zálohu a zamkni ji. Chystáš se přesouvat soubory. Pokud je v tom save, chceš stav z doby před svými experimenty.

Pak si shromáždi tři věci: výstup konzole z prvního startu, který selhal, nejnovější crash report nebo dump, který hra vytvořila, a seznam toho, co se změnilo od doby, kdy naposledy běžel správně. Ten poslední bod je obvykle odpověď a lidé ho přeskakují, protože jsou si jistí, že se nic nezměnilo. Něco se změnilo - aktualizace hry, aktualizace modu stažená z Workshopu při restartu, úprava konfigurace, nový hráč, který udělal něco neobvyklého.

Na RE:NODE je crash loop vidět i zvenčí. Hlídač každé dvě minuty kontroluje uptime, který se vrátil zpět, nebo server, který přešel offline; tři nevyžádané restarty za hodinu umístí na stránku serveru varování a automaticky otevřou ticket a šest server pozastaví, dokud se na něj někdo nepodívá. Varování má k tobě dorazit, dokud je smyčka ještě jen nepříjemnost, a když server zastavíš sám, počítání skončí.

Rozděl pády podle toho, kdy nastanou#

Nejužitečnější jednotlivé pozorování je okamžik, kdy server padne. Zúží hledání dřív, než otevřeš jediný soubor.

Kdy padáNejpravděpodobnější příčinyCo zkusit nejdřív
Dřív, než hra cokoli vypíšeŠpatná verze runtime, špatný startovací řádek, chybějící binárkaPřečti prvních deset řádků výstupu
Při načítání modů nebo pluginůMod nekompatibilní s verzí hry nebo chybějící závislostPřečti log mod loaderu, pak půl
Při načítání světaPoškozený save, mod přidávající obsah světa, konverze verzeSpusť s novým názvem světa
Několik minut po startuKonkrétní oblast, entita nebo plánovaná událost; paměťSleduj graf paměti a poslední řádky před smrtí
Když se připojí konkrétní hráčPoškozená data hráče, item z modu v inventářiPřesuň data toho hráče stranou
V pevný časPlán, automatická událost, časovač pluginuZkontroluj plány a pluginy s časovači

Spusť server dvakrát a porovnej. Pokud padá na stejném řádku obě dvě, je chyba deterministická - soubor, mod, hodnota - a odebírání věcí ji najde. Pokud padá pokaždé jinde, podívej se nejdřív na zdroje: paměť na limitu, plný disk, CPU tak vyhladovělé, že watchdog usoudí, že se server zasekl. Nic ve složce s mody nezpůsobuje náhodný čas pádu tak spolehlivě jako nedostatek paměti.

Čti první chybu, ne poslední#

Logy z crash loopu jsou dlouhé a opakující se a instinkt je číst spodek. Spodek je nejméně informativní řádek, protože popisuje následek. Příčina je první chyba nebo výjimka po úvodním banneru, často o několik obrazovek nad posledním stack trace.

code
[12:04:11 INFO]: Loading 47 plugins[12:04:12 ERROR]: Could not load 'plugins/ShopPlus-3.2.jar' in folder 'plugins'org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [Vault][12:04:15 WARN]: Plugin EconomyBridge v1.4 generated an exception while enablingjava.lang.NullPointerException: Cannot invoke "Economy.getBalance" because ......[12:04:31 ERROR]: Encountered an unexpected exception

Poslední řádek je pád. První chyba ho vysvětluje: chybí závislost, takže druhý plugin dostal null tam, kde čekal ekonomiku, takže se něco dál porouchalo. Oprav první a ostatní obvykle zmizí. Obecnou techniku čtení stack trace odspodu nahoru a řádky, které jen vypadají fatálně, má jak číst konzoli serveru.

Kde první chybu najdeš, záleží na hře, a cesty má logy herních serverů vysvětleny. Ty nejdůležitější pro crash loopy:

  • Minecraft: logs/latest.log a nejnovější soubor v crash-reports/, plus hs_err_pid*.log v kořeni serveru, pokud spadla samotná JVM.
  • Hry s BepInEx (Valheim a další): BepInEx/LogOutput.log, který vypisuje každý plugin při načítání.
  • Rust s Oxide: oxide/logs/; s Carbon carbon/logs/.
  • Source hry se SourceMod: addons/sourcemod/logs/errors_<date>.log.
  • FiveM: konzole serveru a logy txAdminu; chyby resourců se vypisují s názvem resourcu v hranatých závorkách.
  • Servery na Unreal Engine (Palworld, Satisfactory, Abiotic Factor, The Isle): <Project>/Saved/Logs/<Project>.log a Saved/Crashes/.

Vylouči nudné příčiny za pět minut#

Než se dotkneš modů, vylouči příčiny, které mody nejsou. Každá zabere minutu a každá za velký podíl smyček může.

  • Paměť. Podívej se na graf paměti v minutě před každou smrtí. Čára, která stoupá k limitu tarifu a pak svisle spadne, je zastavení pro nedostatek paměti, ne pád. Na RE:NODE se kontejner na limitu zastaví a restartuje čistě, místo aby swapoval. Řešením je víc paměti, méně modů nebo menší view distance, ne půlení.
  • Disk. Plný disk způsobí selhání ukládání a selhané ukládání může zanechat soubor světa o nulové velikosti, který shodí další start. Zkontroluj volné místo ve správci souborů nebo přes df -h.
  • Porty. Address already in use, Failed to bind nebo BindException znamená, že port je obsazený - často předchozí instancí, která se ještě úplně neukončila, nebo tím, že dva servery po kopírování sdílejí port.
  • Přihlašovací údaje. Token Steam herního serveru, který byl odvolán nebo ho používá jiný server, vypršelý klíč Cfx.re, token Klei, který byl vygenerován znovu. Obvykle vypíšou jasnou zprávu a skončí, což politika restartu opakuje donekonečna.
  • Verze. Aktualizace hry den předtím, s mody postavenými pro předchozí verzi. Log mod loaderu obvykle nesoulad verzí pojmenuje.

Pokud nic z toho nevysvětluje, chyba je v souborech: mody, konfigurace nebo svět.

Odděl svět od modů#

Tento test lidé hodiny přeskakují a zabere jeden start. Změň v nastavení spouštění název světa nebo savu na nový, aby server vytvořil čerstvý svět vedle starého, a spusť ho s nainstalovanými mody.

  • Čerstvý svět nastartuje a drží. Problém je v savu - poškozený chunk, rozbitá entita, inventář hráče s itemem z odstraněného modu. Tvoje mody jsou pravděpodobně v pořádku.
  • Čerstvý svět padá stejně. Problém je v instalaci - mody, pluginy, konfigurace nebo soubory hry. Svět je pravděpodobně v pořádku.

Potom název vrať. Čerstvý svět je diagnostika, ne náhrada, a originál leží nedotčený vedle. U her, které se řídí názvem serveru, ne názvem světa (Project Zomboid, Don't Starve Together), zkopíruj raději server pod testovacím názvem.

Pokud je problém ve světě, oprava je specifická pro hru: odstranění poškozeného souboru regionu v Minecraftu (viz chyby chunků a poškození světa), obnovení poslední zálohy, která se načte, nebo smazání datového souboru jednoho hráče, aby se jeho postava vytvořila znovu. Svět ze zálohy z doby před začátkem pádů je často nejrychlejší cesta ven, za cenu všeho, co se od té doby postavilo.

Půlení modů a hledání viníka#

Když test s čerstvým světem ukazuje na instalaci a první chyba viníka nejmenuje, půl. Metoda je na každé hře stejná:

  1. Vytvoř mimo složku s mody složku s názvem třeba disabled.
  2. Přesuň do ní polovinu modů. Závislosti nech u modů, které je potřebují - knihovní mod odstraněný od těch, kdo ho používají, vyvolá jinou chybu a zmate výsledek.
  3. Spusť server. Pokud padá stejným způsobem, chyba je v polovině, která zůstala nainstalovaná. Pokud nastartuje, chyba je v polovině, kterou jsi přesunul.
  4. Půl podezřelou skupinu dál, dokud nezbyde jeden mod.
  5. Vrať všechno ostatní a potvrď, že server nastartuje, když je odebraný jen ten jeden.

Počet startů je dvojkový logaritmus počtu modů zaokrouhlený nahoru: 16 modů potřebuje 4 starty, 64 jich potřebuje 6, 256 jich potřebuje 8. Každé kolo si zapisuj - které mody byly zapnuté, co se stalo - protože v pátém kole si už nikdo nic nepamatuje.

Dvě komplikace jsou běžné. Chybou může být dvojice modů, které spolu kolidují; pak obě poloviny samy nastartují. V takovém případě nech jednu polovinu plně nainstalovanou a druhou půl proti ní. A některé chyby závisejí na světě: mod, který padá, jen když se načte určitý blok nebo tvor. Pokud čerstvý svět nastartoval v pořádku, půl se skutečným světem (na kopii), ne s čerstvým.

Kde mody leží, podle systému

Modový systémSložka k půleníJak vypnout jeden
Pluginy Paper/Spigotplugins/Přesuň .jar pryč; datovou složku nech
Forge, NeoForge, Fabricmods/Přesuň .jar pryč; zkontroluj závislé
BepInEx (Valheim, další)BepInEx/plugins/Přesuň .dll nebo jeho složku pryč
Oxide / uMod (Rust)oxide/plugins/Přesuň .cs pryč; Oxide ho za běhu uvolní
Carbon (Rust)carbon/plugins/Přesuň .cs pryč
SourceModaddons/sourcemod/plugins/Přesuň .smx do plugins/disabled/
FiveMřádky ensure v server.cfgZakomentuj řádek pomocí #
Project ZomboidMods= a WorkshopItems= v .ini serveruOdstraň ID z obou řádků
DayZ, Arma 3startovací parametr -mod=Odstraň @Mod ze seznamu

SourceMod bere plugins/disabled/ jako místo, odkud nenačítá, a je tak nejpořádnější z celého seznamu. Oxide a Carbon plugin znovu načítají bez restartu, takže plugin, který při načtení shodí celý server, je tam vzácný; crash loop na serveru Rustu s frameworky bývá častěji způsoben tím, že je samotný framework po aktualizaci hry zastaralý. Ve FiveM odstranění resourcu, na kterém závisí další - jádro frameworku, inventář, oxmysql - strhne s sebou většinu serveru, proto půl doplňkové resourcy a jádro nech na místě.

Půlení přesouváním souborů je nejbezpečnější dělat ve správci souborů nebo přes SFTP při zastaveném serveru. Přesouvání celých složek bez opětovného nahrávání pokrývá SFTP a správce souborů.

Konfigurace, která shazuje server#

Mody nejsou jediné soubory, které mohou hru shodit. Konfigurační soubor se syntaktickou chybou je po úpravě jednou z nejčastějších příčin smyčky a chybová hláška bývá obecná.

  • JSON (nástroje kolem Palworld, konfigurace modů Valheimu, mnoho her na Unity): jedna koncová čárka nebo chybějící uvozovka a parser to vzdá. Vlož soubor do libovolného validátoru JSON.
  • YAML (konfigurace pluginů pro Minecraft, paper-global.yml): tabulátor místo mezer nebo odsazení o jednu mezeru vedle soubor rozbije. Paper i většina pluginů vypíše číslo řádku.
  • INI (hry na Unrealu): hodnotu na jednom velmi dlouhém řádku, jako v PalWorldSettings.ini, snadno rozbiješ smazáním závorky nebo čárky.
  • XML (7 Days to Die, ekonomické soubory DayZ): neuzavřený tag. DayZ je zvlášť nesmlouvavé u types.xml a chyba v něm může server zastavit nebo tiše vyprázdnit ekonomiku lootu.
  • Lua (SandboxVars.lua z Project Zomboid, nastavení modů v Don't Starve Together): chybějící čárka mezi záznamy.

Nejrychlejší test konfigurační chyby je přejmenovat soubor a jednou spustit; většina her vygeneruje výchozí. Pokud server nastartuje, chyba je v tvých úpravách. Pak porovnej svou verzi s výchozí, nebo úpravy půl stejně, jako bys půlil mody. Když konfiguraci držíš ve verzovacím systému, nebo aspoň datovanou kopii před každou úpravou, je z toho práce na dvě minuty.

Když jsou rozbité samotné soubory hry#

Pokud padá čerstvý svět, všechny mody jsou odebrané, konfigurace jsou výchozí a stále to padá, zbývající podezřelý je instalace. Mezi příčiny patří aktualizace přerušená plným diskem nebo zastavením uprostřed stahování, soubor upravený uvnitř instalačního adresáře nebo instalátor modů, který přepsal soubor hry.

U her ze Steamu aktualizace přes SteamCMD s validate spočítá hash každého souboru a nahradí vše, co neodpovídá publikované verzi. Na panelech postavených na Pterodactylu dělá podobnou práci přeinstalace z panelu, ale než ji stiskneš, přečti si, co přeinstalace u tvého hostingu dělá se soubory - některé odstraní víc než jen binárky hry. Zálohu udělej každopádně předem. Proč je validate nástroj na opravu a ne něco, co spouštět při každém startu, vysvětluje automatizace aktualizací herních serverů.

Jak předejít dalšímu#

Crash loop je levný diagnostikovat, když máš předem připravené tři věci:

  • Záznam změn. Jeden řádek na změnu: datum, co se přidalo nebo aktualizovalo, kdo to udělal. Deset vteřin na každou a z „nic se nezměnilo“ je „Workshop v úterý aktualizoval dva mody“.
  • Zálohu před každou změnou, zamčenou, aby ji rotace neodstranila.
  • Testovací server pro aktualizace modů a patche hry. Levné řešení pokrývá testovací server vedle produkčního a návyky, které udrží seznam modů udržovatelný, udržování modovaného serveru v pořádku.

A aktualizuj mody po jednom, kde to jde. Deset aktualizací najednou následovaných pádem je půlení; jedna aktualizace následovaná pádem je odpověď.

FAQ#

Jak zjistím, který mod mi shazuje server?

Přečti první chybu v logu po startu - často mod pojmenuje. Pokud ne, přesuň polovinu modů ze složky s mody, spusť a půl dál tu polovinu, která stále padá. Každý start podezřelé zpolovičí, takže i velký seznam modů zabere méně než deset startů.

Proč můj server padá pokaždé jinde?

Proměnlivé místo pádu obvykle znamená problém se zdroji, ne rozbitý soubor. Zkontroluj graf paměti, jestli nestoupá k limitu, zkontroluj volné místo na disku a to, jestli CPU neleží na limitu tarifu dost dlouho na to, aby to watchdog vzdal.

Může poškozený svět způsobit crash loop?

Ano, a snadno se plete s problémem modů. Spusť server jednou s novým názvem světa: pokud čerstvý svět běží, problém je save. Obnov poslední zálohu, která se načte, nebo odstraň poškozený soubor regionu či hráče.

Mám server přeinstalovat, abych opravil crash loop?

Až po všem ostatním a až po záloze. Přeinstalace odstraní důkazy a málokdy se dotkne příčiny, která je obvykle v modech, konfiguracích nebo světě, které bys stejně rovnou vrátil.

Pozastaví mi hosting server, který pořád padá?

Na RE:NODE tři nevyžádané restarty za hodinu vyvolají varování a otevřou ticket a šest server pozastaví. Když ho při vyšetřování zastavíš sám, smyčka i počítání skončí.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000