Wie limitiert man die RAM-Nutzung eines (Minecraft) Docker Containers?


mgutt

Recommended Posts

Mein Minecraft Server ist laut Crash Report mit folgendem Fehler abgestürzt:

java.lang.OutOfMemoryError: Java heap space

 

Das scheint darauf hinzudeuten, dass der Container zu wenig RAM zugewiesen bekommen hat. Ich habe über "--memory" 8GB als Limit hinterlegt:

image.png.bbd5c5d53652d07dc75fe6165ae748b6.png

 

Was ich nun nicht verstehe ist die Memory Zeile im Crash Report:

Memory: 1336928 bytes (1 MiB) / 1073741824 bytes (1024 MiB) up to 1073741824 bytes (1024 MiB)

 

Laut meiner Recherche sollte da eigentlich eher sowas stehen:

Memory : 8.00GB (7.83 GB Usable)

 

Weiter unten finde ich dann noch diese Werte, die auf 32GB RAM hinweisen:

	Virtual memory max (MB): 32080.43
	Virtual memory used (MB): 9052.07
	Swap memory total (MB): 0.00
	Swap memory used (MB): 0.00

 

Dabei hat mein Server aber 64GB verbaut. Also wie kommt der auf 32GB bzw wieso nimmt der überhaupt an, dass das das Maximum sei, wo ich doch 8GB als Limit eingestellt habe? Wenn ich innerhalb des Containers die RAM-Auslastung prüfe, sieht der Container ebenfalls meine 64GB:

free -h
              total        used        free      shared  buff/cache   available
Mem:           62Gi       3.8Gi       443Mi       1.7Gi        58Gi        56Gi
Swap:            0B          0B          0B

 

Gibt es keine Möglichkeit den RAM so zu begrenzen, dass das Container wirklich von 8GB als Maximum ausgeht? Weil es erscheint ja logisch, dass der abschmiert, wenn er denkt, dass er eigentlich mehr belegen könnte.

 

Link to comment
7 minutes ago, mgutt said:
free -h

Ok, darauf soll ich mich schon mal nicht verlassen:

https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details

Quote

Inside the container, tools like free report the host’s available swap, not what’s available inside the container. Don’t rely on the output of free or similar tools to determine whether swap is present.

 

Außer --memory finde ich in der Doku nichts. Muss ich evtl dem Minecraft Server selbst mitteilen wie viel RAM es wirklich gibt?!

 

EDIT:  Ok, also hier steht, dass man die server.jar mit Xmx und Xms limitieren kann:

https://www.mvps.net/docs/how-to-increase-the-minecraft-server-ram-allocation/

 

Laut dem Crash Report steht beides auf 1GB:

JVM Flags: 2 total; -Xmx1024M -Xms1024M

 

EDIT2: Ok, man sollte die Config eines Containers auch lesen ^^ Gut, da habe ich nun ebenfalls 8GB eingestellt:

image.thumb.png.8c45e67ec14ed73cae1b8f56d435f491.png

 

Wobei ich mich jetzt immer noch Frage ob 1GB oder 8GB mein Problem waren. Die 9052 "Virtual Memory Used" deuten ja eher daraufhin, dass er die 8GB überschritten hat?!

 

Link to comment
7 minutes ago, mgutt said:

Was ich nun nicht verstehe ist die Memory Zeile im Crash Report:

Was ist denn im template bei xmx und xms eingetragen?

 

3 minutes ago, mgutt said:

Minecraft Server selbst mitteilen wie viel RAM es wirklich gibt?!

Der normale basiert auf Java und Java, naja... 😅

Ja musst auf jeden Fall werte für xmx und xms eintragen.

Link to comment
  • mgutt changed the title to Wie limitiert man die RAM-Nutzung eines (Minecraft) Docker Containers?
4 minutes ago, mgutt said:

Siehe Beitrag zuvor. Habe ich korrigiert. War denn 1GB mein Problem? Weil die 9GB bei Virtual Memory Used irritieren mich.

Ich glaub das der 1GB dein problem war. Minecraft, zumindest Java Edition ist extrem RAM hungrig, für jeden spieler würd ich mindestens 1GB an RAM rechnen, ich schätze das der JVM der platz ausging...

Link to comment
Just now, ich777 said:

für jeden spieler würd ich mindestens 1GB an RAM rechnen, ich schätze das der JVM der platz ausging...

Tatsächlich lief der Vanilla die ganze Zeit mit dem 1GB XMX Limit. 😅 Da waren meine ich sogar schon 5 Spieler gleichzeitig drauf und wenn viele Spieler drauf waren, dann stieg auch der RAM-Verbrauch auf über 3GB laut Container-Übersicht, was ich ja schon irgendwie komisch finde, wenn man doch eigentlich 1GB eingestellt hat.

 

Jedenfalls wird nun hauptsächlich der Paper-Server genutzt, der nun zum ersten mal mit dem Out of Memory Error abgestürzt ist, wie ich auch den Logs entnehmen kann:

[12:35:08] [Server thread/WARN]: abc moved too quickly! 11.484660118942482,-13.344199657193855,19.297132411591548
[12:36:01] [WorldEdit Session Manager/WARN]: Exception in thread "WorldEdit Session Manager" java.lang.OutOfMemoryError: Java heap space
[12:36:01] [Netty Epoll Server IO #3/WARN]: [io.netty.channel.AbstractChannelHandlerContext] An exception 'java.lang.OutOfMemoryError: Java heap space' [enable DEBUG level for full stacktrace] was thrown by a user handler's exceptionCaught() method while handling the following exception:
java.lang.OutOfMemoryError: Java heap space
[12:36:10] [User Authenticator #3/INFO]: UUID of player abc is abc-abc-abc-abc-abc

 

Bei dem habe ich nun neben --memory=8G auch die 8GB bei den XMS und XMX Werten angepasst. Wo vorher im Ruhezustand 1.6GB genutzt wurden, steht er nun auf 6.7GB:

image.png.131cbbab9bdf66be7e536548c1109c51.png

 

 

Mehr RAM wird also offensichtlich dankbar angenommen. Mal sehen ob es in Zukunft wieder einen Absturz gibt.

 

Link to comment
Just now, mgutt said:

RAM-Verbrauch auf über 3GB laut Container-Übersicht, was ich ja schon irgendwie komisch finde, wenn man doch eigentlich 1GB eingestellt hat.

Was soll ich sagen, Java... :D

 

1 minute ago, mgutt said:

Mehr RAM wird also offensichtlich dankbar angenommen. Mal sehen ob es in Zukunft wieder einen Absturz gibt.

Java nimt dir alles. :D

  • Haha 1
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.