Spring Boot RAM Heap


#1

Hallo zusammen,

gestern Nacht hab ich folgenden Server-Fehlermeldung bekommen:

Scheinbar RAM voll, aber warum?! Wenn ich mein Programm profile, sieht es ok aus :

Ist das vielleicht eine Einstellung auf dem Linux Server? Gestartet wird mit xms2g und xmx4g


#2

Hi,

was ich interessant finde ist die Meldung: " in 32 Bit Mode…" in dem dump…

da wäre auch die Frage: Welche genaue Java Version? Welches OS? Wie wurde die Anwendung aufgerufen? etc. Weiterhin läuft das in einem Native Server oder unter Docker etc. ?

Gruß
Karl Heinz


#3

Moin, ist 64 bit Java (Version siehe Screenshot).

OS ist Ubuntu (wechseln aber alles auf Debian inzwischen), aufgerufen wird über einen systemctl Service:

    #[Unit]
Description=apigateway-service
After=syslog.target

[Service]
User=meinUser
ExecStart=/usr/bin/java -jar -Dspring.profiles.active=live -Xms10m -Xmx4g /var/myservice/target/apigateway-service.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

#4

hi,

Problem ist eben nur, dass die Anforderung des Speichers nicht erfüllt werden kann. Meldung: The system is out of physical RAM or swap space… da werden 270_008_320 bytes angefordert, die nicht erfüllt werden können…

270 MB ist schon eine Menge…Die andere Frage ist wieviel physikalischer Speicher hat das System? Weil ja das System gemeldet hat, dass nicht genug physikalischer Speicher da ist?

BTW: Ein Text copy wäre besser als ein image…

Weiterhin hast Du geschrieben, dass mit mit “xms2g und xmx4g” gestartet wurde…laut dem SystemCTL Konfiguration aber nur mit -Xms10m ?Da wäre schon mal die Frage warum so wenig Stacksize?

Gruß
Karl Heinz


#5

Naja. Die Lösungen für das Problem sind ja klar. Und auch in der Fehlermeldung ausführlich beschrieben.

Offensichtlich war nicht genug ram verfügbar.

Da das Profileling ergeben hat, dass die Anwendung unter allen Umständen nur 1 GB ram verbraucht, muss ein weiterer Verbraucher auf der Maschine vorhanden sein, der den ram der Java Anwendung weg nimmt.

Aber die Lösung steht ja in der Fehlermeldung.


#6

Hallo Karl Heinz,

stimmt ist mit 10m gestartet. Hab ich da was falsch verstanden? Ich dachte es wird mit 10m gestartet aber 4 G stehen zur Verfügung. Der Prozess kümmert sich selber um zwischen 10m und 4g zu bleiben.

Wie ist denn die korrekte Erklärung dazu? Vielleicht ist dies scho das Problem


#7

Wenn die Anwenung 270 mb ram allokieren möchte, dann wirst du das mit Konfiguration nicht unterbinden können.


#8

Die Anwendung kann ja gerne die 270mb bekommen nur warum bekommt sie es nicht?


#9

Weil nicht genug Ram da ist.


#10

Vermutlich weil der Server nicht mehr genug hatte.


#11

Hm der hat 8 GB das kann es nicht sein, da läuft nur der Service drauf, welcher ja auf 4 GB begrenzt ist.

Seltsam… ist sicher was falsch konfiguriert oder irgendwas vom OS hat ram gebraucht


#12

Sieht so aus wie https://bugs.openjdk.java.net/browse/JDK-8187709

64 Bit JVM mit Compressed Oops

Also mal den Kommentar im Bug durchsehen und probieren ob du es damit behoben kriegst.