Jos Minecraft-palvelimesi konsoli päättyy riviin exit code 137, Java-prosessi ei kaatunut itsestään. Jokin sen ulkopuolella pysäytti sen väkisin. Hostatulla palvelimella syy on lähes aina muistiraja: palvelin käytti enemmän RAMia kuin paketti sallii, ja järjestelmä tappoi sen. Tämä sivu kertoo miksi niin käy vaikka -Xmx näyttää oikealta, ja mitä kannattaa muuttaa.
Mitä exit code 137 tarkoittaa (OOM kill)
Linux ilmoittaa signaalilla tapetun prosessin koodina 128 plus signaalin numero. 137 on 128 + 9, ja signaali 9 on SIGKILL. Prosessi ei saa varoitusta eikä ehdi tallentaa.
Pelipalvelin pyörii kontissa, jolla on kiinteä muistiraja. Kun koko Java-prosessi ylittää rajan, ytimen out-of-memory-tappaja (OOM killer) lähettää SIGKILL-signaalin. Se on 137:n tavallinen lähde. Myös paneelin pakotettu kill antaa saman koodin, joten jos kukaan ei painanut "kill", epäilty on muisti.
Tämä ei ole sama kuin Javan OutOfMemoryError. Se tulostuu lokiin kun Javan heap on täynnä. 137:n kanssa loki yleensä vain loppuu kesken rivin, koska prosessi tapettiin ulkopuolelta.
Tarkista -Xmx vs kontin RAM
-Xmx rajaa vain Javan heapin. Java käyttää muistia heapin lisäksi: metaspace ladatuille luokille, säikeiden pinot, JIT-koodivälimuisti, roskienkerääjän kirjanpito ja natiivipuskurit joita verkko ja osa plugineista käyttää. Kontti laskee kaiken tämän.
Jos paketissa on 4 GB ja asetat -Xmx4G, pelkkä heap voi täyttää paketin ja Javan muu muisti vie sen yli. Jätä väliä paketin RAMin alle. Karkeana ohjeena pidä pienissä paketeissa vähintään noin 1 GB vapaana ja isommissa jotain 10–15 %. Raskaat modipaketit tarvitsevat usein enemmän.
- Katso käynnistyskomento tai JVM-liput. Jos asetit
-Xmx:n itse, laske sitä niin että se jää selvästi paketin RAMin alle. - Jos käytät Aikarin lippuja, pidä ne. Ne virittävät G1-roskienkerääjän ja asettavat
-Xms:n samaksi kuin-Xmx. Ne eivät vähennä palvelimen muistintarvetta, joten väli pitää jättää silti. - Älä "korjaa" 137:ää nostamalla
-Xmx:ää paketin kokoiseksi. Se tekee virheestä todennäköisemmän, ei harvinaisemman.
Pluginit ja modit jotka syövät muistia
Selvitä mikä oikeasti vie muistin ennen kuin muutat kymmentä asiaa. spark-profiloija toimii Paperilla, Purpurilla, Forgella ja Fabricilla.
/spark healthnäyttää muistinkäytön, TPS:n ja roskienkeruun yhdellä silmäyksellä./spark heapsummarynäyttää mitkä luokat pitävät eniten heapia, mikä osoittaa usein suoraan yhteen pluginiin tai modiin./spark profilernäyttää mihin tick-aika menee, jos palvelin myös lagaa ennen kaatumista.
Tavalliset epäillyt: livekarttojen renderöijät, isot WorldEdit-operaatiot, chunk loaderit, isot mob-farmit tuhansine entiteetteineen ja modipaketit joissa on paljon modeja. Poista tai rajaa yksi asia kerrallaan ja seuraa muistia uudelleen.
Esigeneroi maailma
Uusien chunkien generointi on palvelimen raskaimpia töitä. Kun useampi pelaaja lentää uuteen maastoon yhtä aikaa, muisti piikkaa ja OOM-tappaja voi iskeä. Kun alue esigeneroidaan, työ siirtyy hiljaiseen hetkeen.
- Asenna Chunky-plugin (tai -modi).
- Aseta maailmalle reuna:
/worldborder set 6000. - Aja
/chunky radius 3000ja sitten/chunky start. Valitse säde joka sopii reunaan. - Anna sen valmistua kun paikalla on vähän pelaajia. Se on raskasta työtä käydessään.
Esigeneroidut chunkit vievät levytilaa, joten tarkista tila ensin, etenkin pienessä paketissa.
Paper/Purpur-asetukset
Jos ajat yhä vanillaa, Paperiin tai Purpuriin vaihtaminen on usein suurin yksittäinen parannus. Katso Paper vai vanilla. Viritä sitten nämä:
view-distancetiedostossaserver.properties: montako chunkia jokaiselle pelaajalle lähetetään. Pienempi arvo tarkoittaa vähemmän ladattuja chunkeja per pelaaja.simulation-distancetiedostossaserver.properties: kuinka kaukana pelaajasta entiteettejä ja redstonea tikataan. Sen voi pitää näköetäisyyttä pienempänä.- Entiteettirajat: Paperin maailma-asetuksilla (
config/paper-world-defaults.yml) voi rajata montako tietyn tyypin entiteettiä chunkiin tallennetaan, mikä estää karanneita farmeja kasvamasta loputtomiin.
Muuta yksi asetus, käynnistä uudelleen ja seuraa muistia sparkilla ennen seuraavaa muutosta.
Milloin tarvitset lisää RAMia
Asetukset auttavat, mutta ne eivät saa isoa modipakettia mahtumaan pieneen pakettiin. Tarvitset lisää RAMia kun:
- spark näyttää muistin olevan lähellä rajaa vielä yllä olevien korjausten jälkeen
- modipaketin omat vaatimukset ovat pakettiasi suuremmat
- pelaajamäärä kasvaa ja 137 palaa ruuhka-aikoina
Arvioi tarve RAM-laskurilla. Paketit alkavat 4 GB:stä (Dirt Starter, 3,99 €/kk) ja menevät 32 GB:hen asti (Netherite King, 35,99 €/kk). Pelkkää testausta? Ilmaisessa palvelimessa on 2 GB ja Paper.