RE:NODE

Dimenzování11 min čtení

RAM pro server Project Zomboid: heap a tarif

Paměť serveru Project Zomboid podle hráčů, rozptylu a modů, jak nastavit -Xmx, aby se JVM vešla do kontejneru, a nastavení sandboxu, která tiše zvyšují spotřebu.

3 čtenáři

Dedikovaný server Project Zomboid potřebuje zhruba 3 GB paměti pro dva až čtyři hráče, kteří sdílejí jedno město na vanilla nastavení, 4 až 6 GB pro osm až šestnáct hráčů rozptýlených po mapě a 8 až 10 GB pro šestnáct až třicet dva hráčů s workshop mody a mapovými mody. Protože je server program v Javě, tarif je jen polovina odpovědi: heap Javy, nastavený přes -Xmx, musí být zhruba na 70 až 80 procentech tarifu, aby se kolem něj vešel zbytek procesu. Když zvolíš správný tarif a špatný heap, server se zastaví kvůli nedostatku paměti, zatímco Java si pořád myslí, že místo má. Největším faktorem hned po tom není počet hráčů, ale rozptyl - čtyři hráči ve čtyřech městech stojí víc než deset v jednom.

Co má server Zomboid v paměti#

Server pro každého hráče simuluje celý svět a jeho paměť tvoří čtyři věci.

  • Načtené buňky a chunky mapy kolem každého hráče. Mapa je mřížka buněk a server drží načtenou oblast kolem každého připojeného hráče: budovy, nábytek, kontejnery, předměty na zemi, vozidla a zombie v té oblasti. Hráči ve stejném městě sdílejí jednu načtenou oblast. Hráči rozprášení po Muldraugh, Riverside a Louisville načítají tři.
  • Zombie. Populace zombie se sleduje po celé mapě a zombie v okolí hráčů se plně simulují. Nastavení populace určuje, kolik jich existuje; kolik jich je aktivních najednou, závisí na počtu načtených oblastí.
  • Předměty a vozidla. Každý předmět v načteném kontejneru nebo na zemi, každé vozidlo se svými díly a obsahem kufru. Hráči hromadí a základna s třiceti nacpanými bednami a parkovištěm vyloupených aut je spousta objektů.
  • Mody. Lua skripty, definice předmětů, textury pro vnitřní evidenci serveru a u mapových modů celé další regiony buněk.

To všechno leží v heapu Javy, kromě vlastní režie JVM, která je mimo něj a je důvodem, proč musí být heap menší než tarif.

RAM podle skupiny a typu serveru#

ServerPaměť tarifu-XmxPoznámky
2-4 hráči, vanilla, jedno město3 GB2gPohodlně
8-16 hráčů, rozptýlení4-6 GB3g - 4gNejběžnější případ
16-32 hráčů, mody a mapové mody8-10 GB6g - 7gMapové mody jsou nejdražší část
Hodně modovaný, 100+ workshop položek10 GB a víc7g - 8gSeznam modů otestuj před spuštěním

Tabulku čti podle toho, kde budou hráči, ne jen kolik jich je. Malá soukromá skupina, která celá žije v jednom areálu, potřebuje první řádek, i když má osm lidí. Komunita dvanácti hráčů, z nichž každý obsadil jiné město, potřebuje třetí řádek ještě předtím, než nainstaluje jediný mod.

Správné nastavení heapu Javy#

Server se spouští Java launcherem, který čte argumenty JVM z JSON souboru ve složce serveru, na 64bitových instalacích ProjectZomboid64.json. Heap určují položky -Xms a -Xmx v seznamu vmArgs:

ProjectZomboid64.json
{    "mainClass": "zombie/network/GameServer",    "classpath": ["."],    "vmArgs": [        "-Djava.awt.headless=true",        "-Xms2g",        "-Xmx4g"    ]}

Skutečný soubor obsahuje víc argumentů, včetně voleb garbage collectoru, které se mezi verzemi hry liší. Změň jen dva řádky s heapem a zbytek nech tak, jak byl dodán. V dávkovém launcheru pro Windows se stejné dva přepínače nacházejí v StartServer64.bat. U hostingu s panelem bývá heap vystaven jako proměnná v záložce Startup; pokud ano, použij ji místo úpravy souboru, protože panel může soubor při přeinstalaci přepsat.

Co ty dva přepínače znamenají:

  • `-Xmx` je maximální heap. To je číslo, na kterém záleží.
  • `-Xms` je počáteční heap. Skromná počáteční hodnota je v pořádku; nastavit ji stejně jako -Xmx znamená, že JVM si hned zabere všechno, což je neškodné, pokud je maximum správné, a graf paměti se pak lépe čte.

Pravidlo pro maximum je stejné jako u každého serveru na JVM: nech místo mimo heap. Metaspace pro načtené třídy, zásobníky vláken, code cache JIT kompilátoru a nativní buffery pro síť se všechno počítají do limitu kontejneru a nic z toho není uvnitř -Xmx.

TarifRozumné -XmxMimo heap zbývá
3 GB2g~1 GB
4 GB3g~1 GB
6 GB4g - 4500m~1,5 GB
8 GB6g~2 GB
10 GB7g - 8g~2-3 GB

Co zvyšuje paměť bez nových hráčů#

Několik nastavení sandboxu a serveru mění paměť víc než přidání hráče. Najdeš je ve dvou souborech podle názvu serveru - ve výchozím stavu servertest.ini a servertest_SandboxVars.lua ve složce Zomboid/Server.

Populace zombie

Zombies určuje celkové předvolené nastavení populace a blok ZombieConfig ji zpřesňuje:

servertest_SandboxVars.lua
Zombies = 3,ZombieConfig = {    PopulationMultiplier = 1.0,    PopulationStartMultiplier = 1.0,    PopulationPeakMultiplier = 1.5,    PopulationPeakDay = 28,    RespawnHours = 72.0,},

Populace škáluje paměť i CPU přímo. Všimni si vrcholu: s výchozími hodnotami hustota do 28. dne roste k jedenapůlnásobku počáteční úrovně, takže server dimenzovaný na třetí den může být ve čtvrtém týdnu těsný, aniž kdokoli cokoli změnil. Dimenzuj na vrchol. Důležité je i RespawnHours - respawn znovu zaplňuje vyčištěná města, takže zombie nikdy nepřestanou být náklad. Nastavení na 0 respawn vypne a na mnoha multiplayerových serverech je to zároveň vylepšení hratelnosti a pomalé snížení zátěže. Vysvětlení SandboxVars pokrývá všechny volby.

Předměty na zemi

Hráči věci odhazují. Za měsíce se na serveru nashromáždí odhozené oblečení, prázdné konzervy a tašky v každé ulici, kudy se šlo. Ini serveru pro to má úklid:

servertest.ini
HoursForWorldItemRemoval=24.0WorldItemRemovalList=Base.Hat,Base.Glasses,Base.MaggotsItemRemovalListBlacklistToggle=false

HoursForWorldItemRemoval určuje, kolik hodin musí předmět ležet na zemi, než se odstraní (0 úklid vypne), a WorldItemRemovalList jmenuje typy předmětů, na které se pravidlo vztahuje. S ItemRemovalListBlacklistToggle=true se seznam změní na výjimky, takže se uklidí všechno kromě uvedených předmětů. To je agresivní a může to odstranit věci, které hráči položili záměrně, takže to před zapnutím oznam. Zkontroluj výchozí hodnoty ve svém souboru: mezi verzemi se měnily.

Vozidla

Každé vozidlo na mapě je trvalý objekt s díly, stavem a obsahem. CarSpawnRate v nastavení sandboxu určuje, kolik se jich objeví; server, který ho pro zábavu nastaví vysoko, skončí s parkovišti v každém městě, všechna načtená pokaždé, když je poblíž někdo. Hráči je navíc sbírají. Základna s dvaceti auty je dvacet sad obsahu kufrů.

Mody a mapové mody#

Mody pro Project Zomboid pocházejí ze Steam Workshopu a v ini serveru se uvádějí podle workshop ID a ID modu. Většina stojí málo paměti: balíček předmětů nebo vylepšení pohodlí je hrstka Lua souborů a definic.

Mapové mody jsou jiné. Přidávají do světa nové buňky - nová města, nové silnice, někdy celé nové regiony - a tyto buňky obsahují budovy, kontejnery a loot stejně jako základní mapa. Z toho plynou dva efekty. Svět je větší, takže se hráči rozprostřou dál a najednou načtou víc oblastí. A některé mapové mody jsou husté, s více kontejnery a předměty na budovu než vanilla města. Třetí řádek tabulky dimenzování tu je hlavně kvůli mapovým modům.

Praktické rady pro modovaný server:

  1. Přidávej mody po dávkách a po každé sleduj paměť. Kolekci o stovce položek nejde odladit, když server najednou potřebuje o 2 GB víc.
  2. Po každé změně modů spusť server jednou bez hráčů a zkontroluj jeho paměť v klidu. To je nové minimum.
  3. Udržuj seznam modů shodný na serveru i u klientů. Neshody hráčům zabrání v připojení; paměť nestojí, ale stojí hodiny.

Mody Project Zomboid a workshop popisuje řádky v ini a pořadí načítání.

Jak dokázat, že problém je v paměti#

Lag ve Zomboidu má dvě běžné příčiny a každá chce jinou opravu.

  1. Sleduj graf paměti během nejvytíženější hodiny. Pilovitý průběh JVM, který stoupá, po sběru klesne a znovu stoupá, je normální. Čára přilepená u limitu s malými poklesy znamená, že je heap příliš plný a collector se namáhá, aby uvolnil málo.
  2. Porovnej to s heapem. Pokud je proces u limitu kontejneru, ale heap plný není, je -Xmx na tarif příliš vysoké a přes limit ho tlačí část mimo heap. Sniž -Xmx.
  3. CPU zkontroluj zvlášť. Hordy zombie, mnoho vozidel a hráči rozptýlení po mapě stojí také čas hlavního vlákna. Rubber-banding s pamětí pohodlně pod limitem je CPU. Metodu popisuje CPU, nebo RAM: co brzdí tvůj server a příčiny specifické pro Zomboid výkon a lag Project Zomboid.
  4. Hledej vzor v restartech. Server, který se restartuje každý večer ve stejné vytížené hodině a v logu nic nemá, mu dochází paměť. Server, který se restartuje náhodně s chybami Javy v logu, má problém s modem nebo poškozeným savem.

Na RE:NODE se server, který dosáhne limitu paměti, zastaví a čistě restartuje, místo aby se nechal swapovat. Poddimenzovaný heap je tak zřejmý - náhlý restart, ne pomalý úpadek - a graf paměti v konzoli přesně ukazuje, jak blízko limitu každý večer byl.

Praktický příklad: dvanáct hráčů přerůstá 4 GB#

Skupina dvanácti hráčů spustí vanilla server na tarifu 4 GB s -Xmx3g. První čtrnáct dní je vše v pořádku: většina z nich žije v jednom areálu v Muldraugh a na zásobovací výpravy chodí společně. Ve třetím týdnu se tři hráči přestěhují do Riverside, dva zabere farmu u Rosewoodu a večerní sezení začnou končit náhlými restarty bez jediného záznamu v logu.

Postupně:

  1. Restarty jsou paměť. Nic v logu, v nejvytíženější hodině, a graf v panelu ukazuje, že proces těsně před každým restartem tlačí na hranici 4 GB. To je limit kontejneru, ne chyba Javy.
  2. Heap není celý příběh. S -Xmx3g může heap využít jen 3 GB, takže další tlak tvoří paměť mimo heap plus plný heap. Zvýšit -Xmx na 3500m na stejném tarifu by to zhoršilo, protože to bere místo části, která už proces přes limit tlačí.
  3. Příčinou je rozptyl. Každý večer jsou načtené tři oddělené oblasti místo jedné, každá s vlastními zombie, kontejnery a vozidly, a populace se blíží vrcholu 28. dne.
  4. Možnosti. Přejít na tarif 6 GB s -Xmx4500m, který rozptylu pohodlně stačí. Nebo zůstat na 4 GB a snížit zátěž: nižší PopulationPeakMultiplier, zapnout úklid předmětů a domluvit se ve skupině, že základny zůstanou v jednom nebo dvou městech. Mnoho skupin dělá trochu od obojího.
  5. Zkontroluj po týdnu. Užitečné číslo je vrchol během nejvytíženějšího večera, po překonání vrcholu populace. Pokud je pod zhruba 85 % nového limitu, tarif je správný.

Tento vzor je dost běžný, aby se s ním dalo počítat. Server Zomboid, který bude hostit víc než osm lidí, se má dimenzovat na týden, kdy se skupina rozptýlí, ne na týden, kdy dorazí.

Disk a složka se savem#

Selhává paměť; roste disk. Save multiplayerového světa leží v Zomboid/Saves/Multiplayer/<servername>/ a obsahuje jeden soubor map_X_Y.bin pro každý chunk mapy, který někdo navštívil, plus data hráčů a vozidel. Server, který běží rok na hodně procházené mapě, se měří v gigabajtech a stovkách tisíc malých souborů. Zálohy trvají s růstem déle a obnova je pomalejší, než lidé čekají. Reset mapy a světa v Project Zomboid popisuje resetování částí mapy bez smazání hráčů, což je také poctivý způsob, jak starý save zmenšit.

Tarify Project Zomboid na RE:NODE začínají na 3 GB a jdou až do 10 GB, od 9 USD měsíčně, se třemi přidělenými porty. Instalace vyžaduje přihlášení do Steamu zadané v záložce Setup a přechod na vyšší tarif zvedne limit na serveru, který už máš, bez nutnosti ho znovu stavět.

FAQ#

Stačí 4 GB na server Project Zomboid?

Pro zhruba osm hráčů, kteří hrají většinou ve stejné oblasti, na vanilla nebo lehce modovaném nastavení ano, s -Xmx kolem 3g. Dvanáct hráčů rozptýlených po několika městech, nebo jakékoli mapové mody, chtějí 6 GB nebo víc.

Na kolik mám nastavit -Xmx?

Na sedmdesát až osmdesát procent paměti tarifu. Tím necháš místo pro paměť JVM mimo heap, kterou kontejner také počítá. Na tarifu 4 GB -Xmx3g, na 8 GB -Xmx6g. Nikdy ho nenastavuj na celý tarif.

Proč můj server Zomboid používá ve čtvrtém týdnu víc RAM?

Nejspíš kvůli výchozímu vrcholu populace: s PopulationPeakMultiplier na 1.5 a PopulationPeakDay na 28 počet zombie během prvního měsíce roste. Přidává se k tomu rozptyl hráčů a hromadění předmětů a vozidel. Dimenzuj na vrchol, ne na první týden.

Spotřebovávají mapové mody hodně RAM?

Víc než většina modů. Přidávají do světa buňky, takže se hráči rozptýlí dál a server načítá víc oblastí najednou, a husté mapové mody nesou víc kontejnerů a předmětů na budovu. Server s několika mapovými mody patří do pásma 8 GB a víc.

Pomůže restart serveru?

Vrátí JVM čistý heap a vyplatí se dělat ho podle plánu, typicky jednou denně. Neodstraní předměty, vozidla ani zombie, protože jsou uložené ve světě. Pokud je paměť do hodiny od restartu u limitu, server potřebuje větší tarif nebo lehčí svět.


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