Linux – ich habe keinen RAM mehr

By | 18. März 2017

Da ich in den letzten Jahren immer wieder Diskussionen darum hatte, daß Linux den „gesamten“ RAM auffrisst, habe ich mir gedacht, da ich mein Wissen eh ins Blog schreiben wollte, wäre jetzt ein guter Zeitpunkt den Sachverhalt nochmal eindeutig in einem Artikel zu veröffentlichen.

Worum geht es ?

Ich mach das Problem am sinnvollsten an einem Bild deutlich:

Das ist einer meiner Linux Server, der laut top unschwer behauptet 12.414 GB RAM von 32 GB RAM zu verwenden.
Da nur ein paar kleinere Java-Applikationen und ein DB-Server auf der Büchse laufen, sieht das natürlich erstmal imposant aus.

Wow, die eine JAVA-App zieht 12GB virtuell – das ist übrigens mein BitBucket (6GB) mit ElasticSearch (6GB) – MySql zieht auch schon 3GB RAM.

Aber halt, ist das wirklich so ?

Schauen wir uns doch einfach mal den Prozess 10676 an, der angeblich 6706,7MB verbrät.
– Sorry, daß werden jetzt knappe 1000 Zeilen 🙂 –

Also laut pmap verbraucht dieser Java-Prozess tatsächlich nur ca. 1,6 GB RAM und keine 6,8GB.

Was zeigt denn also top da bei VIRT an ?
Das ist schlicht alles, was die Applikation gerade im Zugriff hat, also Files und RAM.
Wie man am pmap sehr schön sehen kann, hat die eine JVM tatsächlich irgendwo knappe 6 GB insgesamt im Zugriff, also Logfiles, Klassen und halt auch nebenbei noch RAM (1,5GB).

Warum sagt mir mein Top, daß ich 12GB von 32GB RAM gerade verbrauche ?

Hier kommt Linux ins Spiel. Schauen wir uns einfach einmal an, was da in dem Bildchen unter „cached Mem“ steht, kommen wir der Sache auf die Spur

Laut top haben wir also 7,5GB an „cached Mem“.

Machen wir mal die Gegenkontrolle mit free

Und wie man bei free sehr schön sehen kann, haben wir in der Zeile „-/+ buffers/cache“ unter „free“ auf einmal 26GB RAM stehen.
Meine laufenden Applikationen ziehen also tatsächlich nur irgendwas um 6GB RAM, inklusive OS.

Aber was ist das denn nun mit dem „cached Mem“ ?

Linux nimmt sich die Freiheit für schnellere Zugriffe auf Files diese schlicht im RAM zu cachen.
Damit also das Linux auf meinem Server den Zugriff auf die physikalischen Festplatten so gering wie möglich halten kann, cached es halt die Dateien, die oft im Zugriff sind, schlicht im RAM.

Und wenn meine Apps jetzt mehr tatsächlichen RAM brauchen ?

Die Frage ist recht simpel zu beantworten: in dem Moment, wo der tatsächliche RAM-Bedarf seitens der installierten Applikationen höher wird, wird der cached-Memory automatisch vom OS wieder freigegeben an die Applikationen.
Wenn man nun recht langsame Festplatten in seinem System hat, könnte daß ein Moment sein, wo man auf einmal Leistungseinbrüche auf dem System feststellen kann.

 

Fazit

Wenn ihr meint, daß Euer Speicher vom Linux „aufgefressen wird“ schaut einfach mit free nach, was in der Zeile „-/+ buffers/cache“ unter „free“ steht, dann wisst Ihr, was Ihr noch an Reserven habt. 🙂

 

 

Kommentar verfassen