„OutOfMemoryError: Java heap space” en „Could not reserve enough space” op een Minecraft-server oplossen
Drie verschillende problemen heten „out of memory”. Start de server niet en noemt hij de object heap, dan heb je Java meer RAM gevraagd dan de machine heeft. Draait hij en crasht hij dan met OutOfMemoryError, dan had hij meer nodig dan je gaf, of iets lekt geheugen. Zegt hij alleen „Killed”, dan heeft het besturingssysteem hem beëindigd.
Welke fout heb je?
| Melding | Wat het betekent |
|---|---|
| Could not reserve enough space for object heap | Bij het starten: -Xmx is meer dan het beschikbare geheugen, of je gebruikt 32-bits Java. |
| java.lang.OutOfMemoryError: Java heap space | Tijdens het draaien: de heap is vol. De server heeft meer geheugen of minder belasting nodig, of heeft een lek. |
| GC overhead limit exceeded | Java besteedt bijna al zijn tijd aan het opruimen van geheugen. De oorzaken zijn dezelfde als bij een volle heap. |
| „Killed” of exitcode 137 | Het besturingssysteem of de container beëindigde de server omdat de hele machine zonder geheugen kwam te zitten. |
Could not reserve enough space for object heap
- Controleer het vrije geheugen. Voer op Linux
free -huit. Open op Windows Taakbeheer. - Verlaag -Xmx. Java gebruikt meer dan de heap, houd -Xmx op een kleine machine dus op hooguit ongeveer driekwart van het RAM. Op een server van 4 GB is 3G een veilig plafond.
- Gebruik 64-bits Java. De uitvoer van
java -versionhoort 64-Bit te vermelden. Een 32-bits Java kan geen grote heap reserveren.
java -Xms3G -Xmx3G -jar server.jar --nogui
Zet -Xms op dezelfde waarde als -Xmx, zodat de server zijn geheugen bij het starten in één keer reserveert.
java.lang.OutOfMemoryError: Java heap space
- Geef de server meer geheugen, als de machine dat heeft. Lees hoeveel RAM een Minecraft-server nodig heeft voor groottes per servertype.
- Verlaag de belasting. Verlaag
view-distanceensimulation-distancein server.properties, bijvoorbeeld naar 8 en 6. - Zoek naar een lek. Installeer de spark-plugin of -mod, laat de server draaien tot het geheugen hoog is en voer dan
/spark heapsummaryuit. Het toont wat het meeste geheugen gebruikt. Klassen van één plugin bovenaan de lijst wijzen op de boosdoener. - Update of verwijder de boosdoener. Geheugenlekken worden vaak verholpen in een nieuwere versie van de plugin. Een lekkende plugin meer geheugen geven stelt de crash alleen uit.
- Herstart volgens een schema. Een dagelijkse herstart verbergt een langzaam lek tot je het vindt. Het is een noodoplossing, geen oplossing.
„Killed” en exitcode 137
Dit is geen Java-fout. Op Linux beëindigt de out-of-memory killer het grootste proces als de hele machine zonder geheugen komt te zitten, en containers doen hetzelfde bij hun geheugenlimiet. Bevestig het in het kernellog:
sudo dmesg | grep -i "killed process"
Verlaag -Xmx om het op te lossen, zodat Java plus al het andere op de machine in het RAM past, en stop andere geheugenhongerige software, zoals een database of een tweede gameserver. Een klein swapbestand werkt als vangnet, nooit als vervanging van RAM.
Voorkom dat het terugkomt
- Kies de heapgrootte op basis van je servertype en aantal spelers en bekijk daarna het echte gebruik met spark.
- Genereer de wereld vooraf, zodat het genereren van chunks het geheugen niet laat pieken terwijl spelers verkennen.
- Houd plugins en serversoftware up-to-date.
Host je Minecraft-server in Singapore
Lage ping voor spelers in India, Maleisië en Indonesië, op snelle AMD EPYC-cores met NVMe en DDoS-bescherming.
