Preskoči na sadržajBesplatan server — dok traje zaliha
mcbalkan.xyz
Svi članci

28. 08. 2026.

Zašto Minecraft serveru ponestane RAM-a — i kako to popraviti (2026)

Zašto Minecraft serveru ponestane RAM-a — i kako to popraviti (2026)

Ako ti se Minecraft server ruši pod opterećenjem, ne diže se nakon restarta, ili pukne baš u trenutku kad sprema svijet — najvjerojatniji uzrok nije premalo RAM-a. Nego to što je Javi dano previše. Zvuči naopako, znam. Evo zašto je tako i što točno treba postaviti.

Java treba memoriju i izvan heapa

Kad kažeš da server ima 10 GB, misliš da tih 10 GB ide igri. Ne ide. Java ih dijeli na dva dijela.

Prvi je heap — tu žive chunkovi, entiteti, inventari, sve što igra drži u memoriji. To je ono što postavljaš s -Xmx.

Drugi dio nema ime koje itko spominje, a bez njega server ne radi: tablice samog garbage collectora, kod koji učitavaju tvoji plugini (metaspace), JIT code cache, stackovi threadova, native biblioteke. Ništa od toga nije u heapu, a sve to troši memoriju kontejnera.

I tu je kvaka: taj drugi dio raste zajedno s heapom. G1 garbage collector za svoje bitmape i tablice troši otprilike 4–5% veličine heapa. Za heap od 10 GB to je 400–700 MB, prije nego je učitan ijedan plugin.

Računica koja ne može proći

Uzmimo pravi primjer — server od 10 GB s puno plugina, kod mene, prošli tjedan. Bio je postavljen tako da heap smije uzeti 95% kontejnera. Zvuči velikodušno.

  • Heap: ~10.214 MB
  • Ostalo za Javu: ~538 MB
  • Samo G1 tablice za taj heap: 400–700 MB

Znači: garbage collector sam pojede cijeli ostatak, a metaspace, code cache i native biblioteke dobiju — ništa. Kernel ubije kontejner. To nije rizik, to je aritmetika.

Izmjerio sam koliko taj drugi dio stvarno troši na dva svoja servera, jedan 10 GB i jedan 2 GB:

  • Server od 10 GB: 1.630 MB izvan heapa — 15,9% paketa
  • Server od 2 GB: 327 MB izvan heapa — 16,0% paketa

Dva servera koja se po veličini razlikuju pet puta, a broj je isti do desetinke postotka. Stara postavka ostavljala je 5%.

Kako to izgleda kad pukne

Rijetko dobiješ poruku "nema memorije". Umjesto toga dobiješ lanac koji izgleda kao tri odvojena kvara:

  • Server se sruši pod opterećenjem, obično kad se skupi više igrača ili se generira novi teren.
  • Restart ga dokrajči. Gašenje znači spremanje cijelog svijeta, a to je trenutak kad se troši najviše memorije — usred već pune memorije. Spremanje zapne, timeout istekne, proces bude ubijen nasilno.
  • Sljedeći put se uopće ne diže. Crash je napunio disk logovima, a server bez slobodnog diska se ne pokreće.

Sve troje ima jedan uzrok. Ako popravljaš logove, popravljaš simptom.

Koliko heapa zapravo dati

Pravilo je jednostavno: ostavi Javi oko petinu paketa. Ja koristim 80% za heap na svemu iznad 2 GB, i nešto manje na malim paketima gdje je apsolutna brojka važnija od postotka.

  • 2 GB paket → 1.536 MB heap
  • 4 GB paket → 3.276 MB heap
  • 10 GB paket → 8.192 MB heap
  • 24 GB paket → 19.660 MB heap

Nisam to izmislio. Paperova vlastita dokumentacija kaže isto, samo drugim riječima: ako ti host kaže 8 GB, nemoj staviti 8 GB — smanji za 1.000–1.500 MB. Za 8 GB preporučuju 6.500 MB. Moja formula na 8 GB daje 6.553 MB. Razlika je 53 MB, a do brojke smo došli iz dva potpuno različita smjera.

Ovo je koliko heapa dobiva Java od paketa koji već imaš. Koliko paketa uopće uzeti — prema broju igrača i tipu servera — pisao sam u zasebnom vodiču.

Još jedna granica koju vrijedi znati: iznad ~32 GB heapa Java gubi compressed oops, pa svaka referenca počne trošiti osam bajtova umjesto četiri. Heap od 34 GB stane manje podataka nego heap od 31 GB. Iznad te točke plaćaš više za manje.

Aikar’s flags — što su i zašto rade

Aikar’s flags su podešavanje G1 garbage collectora skrojeno za Minecraft, i vrijedi ih uzeti doslovno s Paperovog generatora start skripte umjesto prepisivati s foruma. Ovo su dijelovi koji stvarno mijenjaju stvar:

  • -Xms jednak -Xmx — heap fiksne veličine. Server ionako namjerava iskoristiti sve, pa nema smisla da mu memorija raste u koracima.
  • -XX:+AlwaysPreTouch — Java odmah pri pokretanju zauzme cijeli heap. Zvuči rasipno, a zapravo je najkorisnija stvar na popisu: ako heap ne stane, saznaš to u prvoj sekundi, a ne usred spremanja svijeta.
  • -XX:+ParallelRefProcEnabled — obrada referenci ide u više threadova. Na serveru s puno plugina to je klasičan uzrok zastoja od nekoliko sekundi.
  • -XX:+DisableExplicitGC — ignorira plugine koji sami zovu System.gc() i time zaustave cijeli server.

Jedna napomena koja se rijetko spominje: kontejneri montiraju /tmp kao mali disk u RAM-u. Plugini koji raspakiraju native biblioteke pišu baš tamo, i taj prostor se broji u memoriju kontejnera. Zato na svojim serverima preusmjeravam privremene datoteke izvan njega.

Što NE raditi

Tri savjeta koja ćeš naći po internetu, a koja stvar pogoršavaju:

  • "Daj Javi sav RAM." Najčešći i najskuplji savjet. Upravo je to konfiguracija koja ubija server pod opterećenjem — sve gore napisano događa se točno zbog nje.
  • "Više RAM-a uvijek pomaže." Ne pomaže. Paper doslovno piše da iznad određene točke dobivaš minimalno, i da je 32 GB za obični server bacanje novca. Loše podešen server od 8 GB radi bolje od loše podešenog servera od 16 GB.
  • -XX:+HeapDumpOnOutOfMemoryError. Djeluje korisno — snimi stanje kad pukne. U praksi ti na disk zapiše datoteku veliku kao cijeli heap, napuni kvotu i onemogući sljedeće pokretanje. Nikad ga ne stavljam.

Gdje sve ovo pokrenuti

Ako imaš vlastiti server, uzmi flagove s Paperovog generatora i smanji -Xmx za petinu. To je 90% posla.

Kod mene na mcbalkanu to je već napravljeno — heap se sam računa iz tvog paketa, prati ga ako nadogradiš, a flagovi su isti oni koje Paper objavljuje. Kad ipak zapne, pišeš direktno meni — na našem jeziku, bez ticket sustava i botova. Pogledaj Minecraft hosting.