SDB:Nur wenig freier Speicher vorhanden
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
Problem
Die Ausgabe des Befehls free zeigt nur wenig freien Speicher im System an, z.B.:
total used free shared buffers cached Mem: 8092856 7136972 955884 0 124452 6642888 -/+ buffers/cache: 369632 7723224 Swap: 3020212 0 3020212
und sie vermuten, daß dies Probleme verursachen könnte, wenn das System unter zusätzlicher Last steht.
Hintergrund: Speicher-Hierarchie
Computerspeicher, der mit ähnlicher Geschwindigkeit wie ein moderner Prozessor läuft, ist sehr teuer! Daher wird in aktuellen Computern eine Speicher-Hierarchie verwendet, die von wenig, aber sehr schnellem Speicher (Cache Bausteine) über langsameren, aber größeren Speicher (RAM Speicher) bis zu sehr viel langsamerem, aber sehr großem Speicher (Festplatten) reicht.
Aus ökonomischer Sicht ist es wichtig, vom Prozessor regelmäßig benötigte Daten (also den aktuellen "Workload") möglichst "nahe am Prozessor" zu halten, d.h. in dem schnellsten vorhandenen Speicher abzulegen. Wenn der Speicherbedarf des Systems steigt und das RAM voll ausgenutzt ist, können Daten, die eine Weile nicht benutzt wurden, auf die Festplatte übertragen und wenn nötig später wieder in das RAM zurück geschrieben werden. Dieser Vorgang wird "Swapping" oder "Auslagern" genannt. Eine geringe Menge ausgelagerter Speicher ist für meisten Anwendungsfälle akzeptabel, wenn aber häufig viel Speicher ausgelagert wird, führt dies zu deutlichen Leistungseinbußen des Systems und Sie sollten überlegen, zusätzlichen Speicher (RAM) zu installieren, um die Leistungsfähigkeit Ihres System wieder herzustellen.
Linux & RAM
Linux versucht, das RAM in einem System möglichst wirtschaftlich zu verwenden: Wenn die laufenden Prozesse nicht das gesamte RAM beanspruchen, legt Linux im restlichen RAM Kopien der zuletzt und häufig genutzten Dateien an, um die Zugriffszeiten deutlich zu verkürzen (sogenannter I/O Cache und Buffer). Natürlich werden Änderungen an den Dateien zurück auf die Festplatte übertragen.
In der obigen Beispiel-Ausgabe des Befehls free hat das System 8GB RAM und die laufenden Prozesse brauchen weniger als 2GB RAM. Deshalb hat der Linux Kernel damit begonnen, den Großteil des verbleibenden Speichers (über 6GB) als Cache, bzw. Buffer zu verwenden. Ergo ist mit diesem System alles in Ordnung, obwohl der freie Speicher (relativ) gering ist. Und tatsächlich wird der Swap-(Auslagerungs-) Speicher überhaupt nicht benutzt.
Für ein anderes Beispiel-System schauen Sie sich diese Ausgabe von free -m an. ("-m", um die Daten in Megabyte auszugeben).
total used free shared buffers cached Mem: 2016 1963 53 0 143 490 -/+ buffers/cache: 1328 688 Swap: 2055 449 1605
Auf diesem System ist der (relative) Speicherbedarf höher als in dem ersten Beispiel: Fast das gesamte RAM wird benutzt und der Anteil für Chache und Buffer ist ebenfalls kleiner. Das System hat einigen Speicher bereits ausgelagert. Mit dem Befehl vmstat stellen wir allerdings fest, daß das System im Moment nicht exzessiv Speicher auslagert:
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 2 0 460592 55012 147012 502596 1 2 16 15 5 9 13 20 66 2
tatsächlich lagert das System fast gar nicht aus, die Performance ist durchaus noch akzeptabel. Mit zusätzlicher Last allerdings würden Cache und Buffer weiter verringert bis schließlich der freie RAM Speicher gegen Null gehen und das System beginnen würde, exzessiv Speicherbereiche auszulagern.
Weitere Tools
Neben free und vmstat, die im Paket procps enthalten sind, können die Tools aus dem Paket sysstat für die Aufzeichnung von Logdaten über die Systemauslastung herangezogen werden. Der Befehl sar zum Beispiel gibt an, wieviel Zeit (prozentual) die CPU mit dem Warten auf den Abschluß von I/O-Vorgängen verbringt. Beim Auslagern wird dieser Wert steigen.
Das Verhalten des "Virtual Memory Subsystem" im Linux Kernel (verantwortlich für das Auslagern) kann über das /proc Filesystem beeinflusst werden. Dies geht jedoch über Rahmen dieses Artikels hinaus.
Zusammenfassung
Linux versucht, mit dem vorhandenen RAM wirtschaftlich sinnvoll umzugehen. Wenn der freie RAM Speicher wie von free ausgewiesen knapp wird, deutet dies nicht zwingend auf ein Problem hin. Nur wenn die Werte für "Buffer" und "Cache" sinken und gleichzeitig der Wert für "Swap used" (ausgelagerter Speicher) nach oben geht, ist der RAM Speicher im System tatsächlich zu knapp und Sie sollten überlegen, zusätzlichen RAM Speicher einzubauen.
Neben free und vmstat erlauben die Tools im Paket sysstat die Auswertung des Speicherverbrauchs über einen längeren Zeitraum.
Keywords: free | memory | RAM | lowmemory | swap | buffers | cache | Speicher | knapp | niedrig

