„OutOfMemoryError: Java heap space“ und „Could not reserve enough space“ auf einem Minecraft-Server beheben
Drei verschiedene Probleme heißen „Out of Memory“. Startet der Server nicht und erwähnt den Object Heap, haben Sie Java mehr RAM zugewiesen, als der Rechner hat. Läuft er und stürzt dann mit OutOfMemoryError ab, brauchte er mehr, als Sie ihm gaben, oder etwas verliert Speicher. Sagt er nur „Killed“, hat das Betriebssystem ihn beendet.
Welchen Fehler haben Sie?
| Meldung | Was es bedeutet |
|---|---|
| Could not reserve enough space for object heap | Beim Start: -Xmx ist größer als der verfügbare Speicher, oder Sie nutzen 32-Bit-Java. |
| java.lang.OutOfMemoryError: Java heap space | Im Betrieb: Der Heap ist voll. Der Server braucht mehr Speicher oder weniger Last, oder er hat ein Leck. |
| GC overhead limit exceeded | Java verbringt fast die ganze Zeit damit, Speicher aufzuräumen. Die Ursachen sind dieselben wie bei einem vollen Heap. |
| „Killed“ oder Exit-Code 137 | Das Betriebssystem oder der Container hat den Server beendet, weil der gesamte Rechner keinen Speicher mehr hatte. |
Could not reserve enough space for object heap
- Freien Speicher prüfen. Führen Sie unter Linux
free -haus. Öffnen Sie unter Windows den Task-Manager. - -Xmx senken. Java braucht mehr als den Heap, halten Sie -Xmx auf einem kleinen Rechner daher höchstens bei etwa drei Vierteln des RAMs. Auf einem 4-GB-Server ist 3G eine sichere Obergrenze.
- 64-Bit-Java nutzen. Die Ausgabe von
java -versionsollte 64-Bit nennen. Ein 32-Bit-Java kann keinen großen Heap reservieren.
java -Xms3G -Xmx3G -jar server.jar --nogui
Setzen Sie -Xms auf denselben Wert wie -Xmx, damit der Server seinen Speicher beim Start einmalig reserviert.
java.lang.OutOfMemoryError: Java heap space
- Dem Server mehr Speicher geben, falls der Rechner ihn hat. Lesen Sie wie viel RAM ein Minecraft-Server braucht für Größen nach Servertyp.
- Last senken. Verringern Sie
view-distanceundsimulation-distancein server.properties, zum Beispiel auf 8 und 6. - Nach einem Leck suchen. Installieren Sie das spark-Plugin oder die spark-Mod, lassen Sie den Server laufen, bis der Speicher hoch ist, und führen Sie dann
/spark heapsummaryaus. Es listet auf, was am meisten Speicher belegt. Klassen eines Plugins ganz oben in der Liste zeigen den Übeltäter. - Den Übeltäter aktualisieren oder entfernen. Speicherlecks werden oft in einer neueren Plugin-Version behoben. Einem lecken Plugin mehr Speicher zu geben, verzögert den Absturz nur.
- Nach Zeitplan neu starten. Ein täglicher Neustart verdeckt ein langsames Leck, bis Sie es finden. Das ist ein Notbehelf, keine Lösung.
„Killed“ und Exit-Code 137
Das ist kein Java-Fehler. Unter Linux beendet der Out-of-Memory-Killer den größten Prozess, wenn dem ganzen Rechner der Speicher ausgeht, und Container tun dasselbe an ihrer Speichergrenze. Bestätigen Sie es im Kernel-Log:
sudo dmesg | grep -i "killed process"
Zur Lösung senken Sie -Xmx, damit Java samt allem anderen auf dem Rechner in den RAM passt, und beenden Sie andere speicherhungrige Software, etwa eine Datenbank oder einen zweiten Spielserver. Eine kleine Swap-Datei dient als Sicherheitsnetz, nie als Ersatz für RAM.
Damit es nicht wiederkommt
- Wählen Sie die Heap-Größe nach Servertyp und Spielerzahl und beobachten Sie dann die tatsächliche Nutzung mit spark.
- Generieren Sie die Welt vorab, damit die Chunk-Erzeugung den Speicher nicht in die Höhe treibt, während Spieler erkunden.
- Halten Sie Plugins und Server-Software aktuell.
Hosten Sie Ihren Minecraft-Server in Singapur
Niedriger Ping für Spieler in Indien, Malaysia und Indonesien, auf schnellen AMD-EPYC-Kernen mit NVMe und DDoS-Schutz.
