- Linux nutzt den gesamten verfügbaren Arbeitsspeicher für Caches und Seitencache, daher bedeutet wenig freier Speicher nicht unbedingt, dass ein Problem vorliegt.
- Die Kombination aus Swap, zram/zswap und einer korrekten Einstellung von vm.swappiness ermöglicht es Ihnen, Leistung und Stabilität in Einklang zu bringen.
- cgroup v2, systemd-oomd und Tools wie earlyoom oder nohang ermöglichen eine präzise Kontrolle über den Speicherdruck und OOM-Ereignisse.
- Die Überwachung mit free, vmstat, htop, sar oder Glances ist der Schlüssel zur Erkennung von Engpässen und zur Optimierung des Speichermanagements.

Wer Systeme verwaltet, mit Containern arbeitet oder Produktionsserver betreut, für den ist ein umfassendes Verständnis des Speichermanagements unter Linux unerlässlich. Es entscheidet darüber, ob ein Server Lastspitzen problemlos bewältigt oder ob er überlastet wird, in den Thrashing-Modus gerät oder im ungünstigsten Moment den gefürchteten OOM-Killer auslöst.
Linux ist darauf ausgelegt, den Arbeitsspeicher (RAM) so effizient wie möglich zu nutzen: Es speichert Dateien im Cache, komprimiert Seiten, lagert Daten in den Auslagerungsspeicher aus und priorisiert Prozesse nach präzisen Richtlinien. Von außen betrachtet mag es so aussehen, als würde es „viel Speicher verbrauchen“ oder als gäbe es „nie freien RAM“, aber in Wirklichkeit ist es darauf ausgelegt, maximale Leistung und Stabilität zu gewährleisten . Sehen wir uns Schritt für Schritt und mit einer einfachen Erklärung an, wie das alles funktioniert und wie Sie es auf fortgeschrittene Weise optimieren können.
Grundlegende Konzepte und Mythen zum Thema Speicher in Linux

Bevor man an Kernelparametern herumspielt oder zram einbindet, als gäbe es kein Morgen, ist es ratsam, sich ein paar klare Vorstellungen von Speichertypen, Architektur und der Art und Weise zu machen, wie das System RAM sieht.
Die maximale Speicherkapazität eines Computers wird durch das Betriebssystem und die Prozessorarchitektur bestimmt. Ein 32-Bit-System ist typischerweise auf 4 GB RAM beschränkt, während ein 64-Bit-System problemlos Dutzende oder Hunderte von Gigabyte verarbeiten kann (theoretisch deutlich mehr, wobei die tatsächliche Grenze durch die Hardware vorgegeben ist).
Unter Linux wird der gesamte Speicher als virtueller Speicher verwaltet . Dies umfasst sowohl den physischen Arbeitsspeicher (RAM) als auch den Auslagerungsspeicher. Der RAM kann nur durch Hinzufügen physischer Speichermodule erweitert werden, der virtuelle Speicher hingegen kann mithilfe von Festplatten (Partitionen oder Auslagerungsdateien) und fortgeschrittenen Mechanismen wie zram oder zswap vergrößert werden.
La physischer Speicher (RAM) Es handelt sich um die schnelle und teure Ressource: Hier werden Prozesse, Bibliotheken, Dateicaches, E/A-Puffer, gemeinsam genutzter Speicher usw. geladen. Linux verfolgt eine klare Philosophie: Ist freier RAM vorhanden, ist es besser, ihn als Cache zu nutzen und Zugriffe zu beschleunigen, als ihn ungenutzt zu lassen. Daher ist es bedenklich, wenn bei Tools wie beispielsweise wenig „freier“ Speicher angezeigt wird. free Das bedeutet nicht, dass du ein Problem hast.
Der Festplattenspeicher ( persistenter Speicher) ist deutlich langsamer. Während der Arbeitsspeicher (RAM) in Nanosekunden reagiert, benötigt selbst eine SSD Mikrosekunden oder Millisekunden. Daher versucht das System, häufig verwendete Daten im Arbeitsspeicher zu halten und greift nur dann auf die Festplatte zurück, wenn dies unbedingt notwendig ist: beim Laden von Programmen, beim Lesen selten genutzter Daten oder beim Auslagern von Seiten.
Virtueller Speicher, Seiten und interne Kernelstrukturen
Virtueller Speicher ist der Mechanismus, mit dem Linux jedem Prozess einen eigenen, isolierten und geschützten Adressraum bereitstellt . Hardware und Kernel übersetzen virtuelle Adressen mithilfe von Seitentabellen in physische Adressen.
Die kleinste Einheit zur Speicherverwaltung ist die Seite , typischerweise 4 KB. Das gesamte virtuelle Speichersystem basiert auf Seiten: Sie werden zugewiesen, freigegeben, ausgelagert, zwischengespeichert und mit verschiedenen Berechtigungen versehen (schreibgeschützt, ausführbar usw.).
Seitentabellen sind hierarchische Strukturen , die vom Kernel verwaltet werden. Sie speichern für jede virtuelle Seite eines Prozesses den Speicherort der zugehörigen physischen Seite (sofern vorhanden), deren Berechtigungen und ihren aktuellen Zustand. Diese Zuordnung ermöglicht die Isolation von Prozessen, die gemeinsame Nutzung von Seiten und die direkte Abbildung von Dateien in den Speicher.
Wenn ein Prozess auf eine gültige Adresse zugreift, die Seite aber nicht bereit ist, tritt ein Seitenfehler auf . Dieser kann geringfügig (die Seite befindet sich im Arbeitsspeicher, muss aber aktualisiert werden) oder aufwändig (die Seite befindet sich auf der Festplatte, im Auslagerungsspeicher oder in einer Datei und muss in den Arbeitsspeicher geladen werden) sein. Treten Seitenfehler häufig auf, verlangsamt sich das System, da es zu viel Zeit mit dem Lesen von der Festplatte verbringt.
Der Seitencache ist ein vom Kernel verwalteter Cache für Dateiseiten. Er speichert Daten und Metadaten für Dateien und Verzeichnisse, um Festplattenzugriffe zu reduzieren. Dies ist einer der Gründe, warum Linux scheinbar den gesamten Arbeitsspeicher nutzt: Tatsächlich verwendet es Speicher, der von Anwendungen nicht aktiv genutzt wird, um Festplattenzugriffe zu beschleunigen.
Speichertypen: dateibasierter Speicher, anonymer Speicher und deren Beziehung zum Auslagerungsspeicher.
Unter Linux wird üblicherweise zwischen Dateispeicher und anonymem Speicher unterschieden . Beide befinden sich im Arbeitsspeicher (RAM), aber ihr Ursprung und die möglichen Sicherungsmechanismen auf der Festplatte sind unterschiedlich.
Der Aufruf Dateispeicher Es handelt sich um diejenige, die durch Systemdateien gesichert wird: ausführbare Binärdateien, gemeinsam genutzte Bibliotheken, zugeordnete Daten mit mmap aus einer Datei usw. Dieser Speicher kann verworfen und bei Bedarf aus der Originaldatei neu geladen werden.
La anonyme Erinnerung Es ist alles, was der Prozess reserviert und nicht an eine Datei gebunden ist: der dynamische Heap, der Stack, private Regionen mit MAP_ANONYMOUSund die Bereiche, die beim Kopieren per Copy-on-Write kopiert werden fork()Dieser Speicher existiert nur im RAM (oder im Auslagerungsspeicher, falls er verschoben wird) und seine einzige mögliche Sicherung ist genau dieser Auslagerungsspeicher.
Wenn der Kernel Arbeitsspeicher freigeben muss, versucht er zunächst, Seiten freizugeben, die er wiederherstellen kann: typischerweise Seiten aus dem Seitencache oder dateibasierten Bereichen. Erst wenn kein Speicherplatz mehr vorhanden ist oder die Speicherauslastung sehr hoch ist, lagert er anonymen Speicher in den Auslagerungsspeicher aus . Dies ist zwar deutlich aufwändiger, verschafft dem System aber eine kurze Pause.
Speicherdruck, heftiges Umherwirbeln und OOM-Killer
Speicherengpässe treten auf, wenn die Anzahl freier Seiten unter bestimmte interne Schwellenwerte fällt. Der Kernel ist dann gezwungen, ständig Speicher freizugeben: Caches leeren, geänderte Seiten auf die Festplatte schreiben, selten genutzte Seiten entfernen usw.
Hoher Speicherdruck kann sehr deutliche Symptome hervorrufen: hohe Latenz bei Webdiensten , langsame grafische Benutzeroberflächen, verzögerte Antworten von Remote-Sitzungen (SSH, VNC, RDP), ruckelnde Mausbewegungen, Fenster, die Sekunden zum Reagieren benötigen usw. In diesem Fall konzentriert sich das System mehr auf das Überleben als auf die Ausführung nützlicher Aufgaben.
Thrashing tritt auf , wenn der Arbeitsspeicher (RAM) nicht ausreicht, um die von Prozessen ständig verwendeten Seiten zu speichern. Der Kernel beginnt daraufhin, Seiten kontinuierlich auszulagern: Er entfernt eine Seite, um eine andere einzufügen, benötigt aber sofort wieder die gerade entfernte. Dies führt zu einer Endlosschleife aus Seitenfehlern und Festplattenzugriffen, die die Leistung beeinträchtigt.
Bei aktiviertem Swap-Speicher bedeutet Thrashing, dass anonyme Seiten ständig zwischen RAM und Swap-Speicher hin- und hergeschoben werden, wodurch die Festplatte überlastet wird. Ohne Swap-Speicher verlagert sich das Problem auf die Dateiseiten: Diese werden verworfen und wiederholt aus dem Dateisystem neu geladen, was den Rechner ebenfalls praktisch unbrauchbar machen kann.
Falls der Kernel immer noch keinen freien Speicher erhält, kommt Folgendes zum Tragen: Speichermangel-Mechanismus (OOM)Wenn alle verworfenen, komprimierten oder ausgelagerten Speicherbereiche ausgeschöpft sind, berechnet der Kernel für jeden Prozess eine Punktzahl (oom_scoreund entscheidet, welches geopfert werden soll. Dieser Vorgang wird abgeschlossen durch die OOM-Killer um eine erhebliche Menge RAM freizugeben und einen Totalabsturz zu vermeiden.
Tausch: Was ist das, wie viel muss man einzahlen und warum ist es nicht „der Teufel“?
Der Auslagerungsspeicher hat einen schlechten Ruf, was zum Teil auf veraltete Ratschläge und Vereinfachungen wie „Wenn man viel RAM hat, braucht man keinen Auslagerungsspeicher“ zurückzuführen ist. In Wirklichkeit ist der Auslagerungsspeicher ein wichtiger Bestandteil des Linux-Speicherdesigns, selbst auf Systemen mit viel RAM.
Swap ist ein Bereich auf der Festplatte (Partition oder Datei), den der Kernel zur Speicherung inaktiver Speicherseiten verwendet . Dadurch wird Arbeitsspeicher für Prozesse freigegeben, die ihn tatsächlich benötigen. Es handelt sich dabei nicht um virtuellen Speicher selbst, sondern um einen der Mechanismen, die dies ermöglichen.
Ohne Auslagerungsspeicher gibt es keinen Ausweichort für anonyme Seiten, wenn der Speicherdruck steigt. Der Kernel kann zwar weiterhin auf Caches und dateibasierte Seiten zurückgreifen, aber sobald der anonyme Speicher kritisch hoch wird, ist er praktisch gezwungen, den OOM-Killer viel früher aufzurufen. Technisch gesehen kann Linux ohne Auslagerungsspeicher funktionieren, aber in der Praxis stellt dies in den meisten Fällen ein unnötiges Risiko dar.
Bei der Dimensionierung des Auslagerungsspeichers gibt es kein Patentrezept, aber je nach Einsatzzweck des Rechners existieren einige recht vernünftige moderne Kriterien :
- Server ohne Ruhezustand4–8 GB Auslagerungsspeicher sind in der Regel als Puffer ausreichend, selbst bei reichlich Arbeitsspeicher. Für speicherintensive Anwendungen (Datenbanken, Virtualisierung) kann er auf das 1,5-Fache des Arbeitsspeichers erhöht werden, Priorität sollte jedoch die Erweiterung des physischen Arbeitsspeichers haben.
- Desktops ohne RuhezustandBei 16 GB RAM oder mehr sind 2-4 GB Swap-Speicher als Sicherheitsreserve mehr als ausreichend.
- Geräte mit RuhezustandsfunktionDer Auslagerungsspeicher muss mindestens so groß wie der Arbeitsspeicher (RAM) oder etwas größer sein, da das System beim Ruhezustand den gesamten Speicherinhalt in den Auslagerungsspeicher schreibt.
Das Erstellen von Auslagerungsspeicher ist sehr flexibel. Sie können eine dedizierte Partition oder eine Auslagerungsdatei verwenden . Eine Auslagerungsdatei ist ideal, wenn Ihre Festplatte bereits partitioniert ist oder Sie die Größe anpassen möchten, ohne das gesamte System neu zu konfigurieren.
Speichermetriken: freier Speicher, vmstat, ps, RSS, PSS und mehr
Klassische Linux-Speicherverwaltungstools können zu Fehlinterpretationen führen, wenn man die Bedeutung der einzelnen Spalten nicht kennt. Der Befehl free -h Es ist die einfachste Möglichkeit, auf einen Blick den gesamten Speicher, den belegten Speicher, den freien Speicher, den Cache und die Auslagerungsdatei zu sehen.
Am Ausgang von free Es ist wichtig, die Zeile zu betrachten, die Puffer und Cache abzieht, da diese Spalte die Der tatsächlich von Prozessen belegte SpeicherAbgesehen davon, was der Kernel als Cache verwendet und bei Bedarf schnell freigeben kann.
Mit vmstat -s -S M Sie erhalten eine detailliertere Übersicht: Gesamtspeicher, belegter Speicher, freier Speicher, aktiver Speicher, Leerlaufspeicher, Auslagerungsspeicher usw. Sie können auch Folgendes konsultieren: /proc/meminfo Um jede Kennzahl im Detail zu sehen, ist das Ergebnis allerdings trockener und weniger benutzerfreundlich.
Um herauszufinden, welche Prozesse den Arbeitsspeicher am stärksten belasten, ps aux zeigt Spalten wie VSZ (gesamter virtueller Speicher, den der Prozess nutzen könnte, wenn er alles laden würde) und RSS (Resident Set Size, tatsächlicher Speicher im RAM). Hinweis: RSS umfasst auch gemeinsam genutzten Bibliotheksspeicher, der mehrfach gezählt wird, wenn er von mehreren Prozessen verwendet wird.
Hier kommt ins Spiel PSS (Proportional Set Size)Dadurch werden die Kosten gemeinsam genutzter Bibliotheken auf die Prozesse verteilt, die sie verwenden. Um PSS einfach zu erhalten, gibt es Tools wie beispielsweise smem, sehr nützlich, um zu erkennen, welche Anwendungen wirklich "Datenfresser" sind, ohne die Daten durch gemeinsam genutzte Bibliotheken zu verfälschen.
Speicherfragmentierung, Stack, Heap und ulimit
Ein weiterer, weniger sichtbarer Aspekt der Speicherverwaltung ist die Fragmentierung . Man kann zwischen interner Fragmentierung (wenn gerundete Blöcke in Vielfachen von 4, 8 oder 16 Bytes allokiert werden, wodurch ein ungenutztes Stück übrig bleibt) und externer Fragmentierung (wenn freier Speicher vorhanden ist, aber in kleine Teile aufgeteilt ist, die die Nutzung einer großen zusammenhängenden Allokation verhindern) sprechen.
Bei Anwendungen wie Redis werden Sie manchmal Unterschiede zwischen dem vom System gemeldeten Speicher (RSS) und dem Speicher feststellen, den die Anwendung selbst als nützlich betrachtet (used_memoryDiese Distanz ist üblicherweise größtenteils darauf zurückzuführen, äußere Fragmentierung, Lücken, die das System als belegt zählt, die der Prozess aber tatsächlich nicht nutzt.
Das Gedächtnis eines Prozesses ist konzeptionell unterteilt in Stapel und HeapDer Stack dient der Speicherung lokaler Variablen und Funktionsaufrufe, während der Heap für dynamische Speicherzuweisungen genutzt wird. malloc() und Ähnliches. Wenn Datenstrukturen größer werden, als der Stack aufnehmen kann, werden sie vom Heap geladen und mithilfe von Zeigern verwaltet.
Die maximale Stapelgröße pro Prozess kann angepasst werden mit ulimit -a und Systemkonfigurationen. Eine Reduzierung dieses Werts begrenzt die Anzahl großer lokaler Variablen, während eine Erhöhung mehr Variablen oder tiefe Rekursion ermöglicht. Die Anpassung dieses Parameters kann helfen, die Speichernutzung besser zu kontrollieren und bestimmte Arten der Fragmentierung zu reduzieren, ist aber kein Allheilmittel.
Erweiterte Überwachung und Diagnose: top, htop, vmstat, sar und mehr
Um Prozesse zu finden, die Arbeitsspeicher verbrauchen, können Sie folgendermaßen vorgehen: top Und wenn Sie etwas Benutzerfreundlicheres wünschen, mit htopLetzteres zeigt Balken für CPU-, Speicher- und Swap-Speicher-Auslastung an und ermöglicht das interaktive Sortieren und Filtern von Prozessen.
In Debian und Derivaten, install htop mit sudo apt install htopIn AlmaLinux und anderen Red Hat-ähnlichen Systemen, mit sudo dnf install htopSobald Sie im System sind, können Sie nach Speicher sortieren, nach bestimmten Prozessen suchen und problematische Aufgaben direkt über die Benutzeroberfläche beenden.
Für detailliertere Analysen und den Batch-Modus, vmstat 5 Es liefert regelmäßig Informationen zu Prozessen, Speicher, Paging, Block-E/A, Interrupts und CPU-Planung. Es eignet sich ideal, um die Entwicklung des Speicherdrucks im Zeitverlauf zu beobachten.
Die Suite sysstat Es beinhaltet Werkzeuge wie zum Beispiel sardie es Ihnen ermöglichen, die Nutzung von Speicher und anderen Ressourcen zu erfassen und zu analysieren. Zum Beispiel: sar -r 1 5 Es zeigt die Speicher- und Auslagerungsnutzung fünfmal pro Sekunde an. Unter Debian ist es standardmäßig installiert. sudo apt install sysstatund in AlmaLinux mit sudo dnf install sysstat.
Wenn Sie ein tiefgreifendes Debugging auf Kernel-Ebene benötigen, bpftrace Es handelt sich um ein leistungsstarkes, auf eBPF basierendes Tool. Es ermöglicht die Instrumentierung von Systemaufrufen, die Beobachtung von Speicherzugriffen und die Erkennung von Engpässen ohne Neukompilierung oder Neustart. Es wird üblicherweise mit installiert. sudo apt install bpftrace auf Debian-ähnlichen Systemen.
Praktisches Speichermanagement: Swap, Swappiness und Cache-Bereinigung
Eine grundlegende Aufgabe auf vielen Servern ist die Überprüfung der aktueller Stand des Tauschs. Mit swapon --show Sie haben eine Liste der aktiven Auslagerungsgeräte und -dateien mit Angabe ihrer Größe, ihres Typs und ihrer Priorität. Falls Sie spontan Auslagerungsspeicher hinzufügen müssen, können Sie eine Datei erstellen mit fallocate, sichere Genehmigungen mit chmod 600Formatieren Sie es mit mkswap und aktivieren Sie es mit swaponUm die Änderung dauerhaft zu speichern, fügen Sie einfach den entsprechenden Eintrag hinzu zu /etc/fstab.
Parameter vm.swappiness Dieser Wert steuert, wie der Kernel die Auslagerung von Daten gegenüber der weiteren RAM-Belegung priorisiert. Er reicht von 0 bis 100. Niedrige Werte (10–20) bewirken, dass das System die Auslagerung erst dann nutzt, wenn es unbedingt notwendig ist, während hohe Werte (60 oder mehr) das System dazu anregen, Seiten häufiger in die Auslagerung zu verschieben, um freien RAM zu erhalten.
Auf Servern mit langsamen Festplatten oder großen Datenbanken ist es oft von Interesse Verringere die SwippigkeitZum Beispiel bis 10 oder 20, mit sudo sysctl vm.swappiness=10Bei Desktop-PCs mit schnellem zram oder SSDs können Zwischenwerte wie 30-60 ein gutes Gleichgewicht zwischen Latenz und Speicherauslastung bieten.
In Fällen, in denen das Erinnerungsvermögen gut ist, ist es manchmal notwendig, die Cache-Freigabe mit sudo sync && sudo sysctl -w vm.drop_caches=3Dadurch wird ein Großteil des Seitencaches und der Dentries geleert. Dies ist gelegentlich für Tests oder zur Freigabe von Speicher auf Systemen mit sehr begrenzten Ressourcen nützlich, sollte aber nicht routinemäßig verwendet werden, da dadurch auch die durch das Caching erzielten Leistungsverbesserungen verloren gehen.
Erweiterte Steuerungswerkzeuge: cgroup v2, memory.pressure und OOM im Benutzermodus
In modernen Systemen, die systemd und cgroup v2 verwenden , lässt sich die Speicherverwaltung durch Prozessgruppen feinabstimmen. cgroup v2 organisiert Aufgaben hierarchisch und legt Ressourcenlimits und Prioritäten (CPU, Speicher, E/A) auf Gruppenebene fest, nicht nur auf Ebene einzelner Prozesse.
Innerhalb der Speicherhierarchie können Parameter wie beispielsweise memory.low Sie ermöglichen es Ihnen anzugeben, dass der Speicher bestimmter Cgroups besser vor globalem Speicherzugriff geschützt werden soll, während andere eher entbehrlich sein können, wenn RAM freigegeben werden muss.
Die Datei memory.pressure Es liefert sehr nützliche Metriken: wie lange Aufgaben in dieser Cgroup aufgrund von Speichermangel blockiert wurden, in Intervallen von 10, 60 und 300 Sekunden. Die Variante einige Es zeigt an, ob mindestens eine Aufgabe verzögert wurde, und voller Es spiegelt Momente wider, in denen alle Aufgaben der Gruppe gleichzeitig beeinträchtigt waren.
Zusätzlich zum OOM-Killer des Kernels sind Lösungen im Benutzermodus entstanden, wie zum Beispiel Frühraum, nohang o systemd-oomdEarlyOOM überwacht RAM und Swap-Speicher und beendet proaktiv Prozesse, wenn diese unter bestimmte Schwellenwerte fallen. oom_score höher, wodurch die Nutzbarkeit wiederhergestellt wird, bevor die Maschine einfriert.
NoHang geht noch einen Schritt weiter: Es unterstützt mehr Auswahlkriterien , berücksichtigt den Speicherdruck und lässt sich gut in fortgeschrittene Konfigurationen integrieren, obwohl seine Entwicklung nicht immer reibungslos verlief. Systemd-oomd hingegen integriert sich direkt in systemd und cgroup v2 und ist derzeit in vielen Distributionen die bevorzugte Option für ein intelligenteres und differenzierteres Management von Speicherknappheit.
Moderner Swap: zram, zswap und Geräteprioritäten
Zusätzlich zum „klassischen“ Disk-Swapping bietet Linux moderne Mechanismen, die die Leistung durch die Kombination von RAM-Komprimierung und selektiver Festplattennutzung erheblich verbessern.
zram ist ein Kernelmodul, das Blockgeräte im Arbeitsspeicher (RAM) erzeugt, auf denen Seiten komprimiert gespeichert werden. Diese werden typischerweise als ultraschnelle Auslagerungsgeräte verwendet: Komprimierung und Dekomprimierung beanspruchen zwar etwas CPU-Leistung, aber man gewinnt logische Speicherkapazität und reduziert die Festplattennutzung drastisch.
Bei vielen Distributionen genügt die Installation. zram-Tools o zram-Generator und aktivieren Sie den zugehörigen Dienst. In Debian können Sie beispielsweise Folgendes verwenden: sudo apt install zram-tools und aktivieren zramswap mit systemd. In AlmaLinux, mit sudo dnf install zram-generator und dem dazugehörigen Service.
zswap hingegen fungiert als komprimierter Cache vor dem eigentlichen Festplatten-Swap-Speicher . Zunächst werden ausgelagerte Seiten im komprimierten RAM gespeichert; erst wenn dieser Cache voll ist oder Seiten inaktiv werden, werden die Daten in den eigentlichen Swap-Bereich geschrieben. Dies reduziert die Festplatten-E/A und verlängert die Lebensdauer von SSDs, allerdings auf Kosten einer höheren CPU-Auslastung.
Bei der Kombination mehrerer Auslagerungsgeräte (z. B. zram und einer Festplattendatei) ist es unerlässlich, die Prioritäten. Mit swapon -p oder die Option pri= en /etc/fstab Sie legen fest, welches Gerät zuerst verwendet werden soll. Üblicherweise wird dem zram eine hohe Priorität (z. B. 100) und dem Festplatten-Swap eine niedrigere Priorität (10) zugewiesen, damit der Kernel den komprimierten Swap-Speicher im RAM optimal nutzt, bevor er auf die Festplatte zugreift.
Speichermanagement auf Servern: Auslagerungsspeicher, Dienste und Sicherheit
Bei Webservern (Apache, Nginx), Datenbanken (MySQL, MariaDB, MongoDB) und ressourcenintensiven Anwendungen ist der Arbeitsspeicher die entscheidende Ressource. Die Konfiguration von RAM und Swap-Speicher bestimmt direkt, wie viele gleichzeitige Anfragen verarbeitet werden können, bevor das System an seine Grenzen stößt.
Bei Datenbank-Engines wie MongoDB ist es entscheidend, dass der physische Arbeitsspeicher (RAM) die Anforderungen der Datenbank übersteigt . Andernfalls greift die Datenbank auf Auslagerungsspeicher zurück, und die Performance sinkt aufgrund des erheblichen Unterschieds zwischen RAM- und Festplattenzugriffen drastisch. Dasselbe gilt für MySQL/MariaDB, wo Tools wie MySQLTuner Speicherparameter basierend auf dem verfügbaren RAM empfehlen.
Um Speicherplatz zu sparen, empfiehlt es sich, nicht benötigte Dienste zu beenden und nicht mehr benötigte Container, Images und Docker-Volumes zu entfernen. Gerade in Entwicklungs- und Testumgebungen sammeln sich leicht unbemerkt Ressourcen an, die Gigabytes an RAM und Festplattenspeicher belegen.
Auch die Sicherheit spielt eine Rolle: unnötige Ports geöffnet Sie vergrößern die Angriffsfläche. Schadsoftware, die es schafft, in ein System einzudringen, kann beispielsweise Mining-Prozesse starten, die CPU und Arbeitsspeicher beanspruchen, und Aufgaben einplanen in crontab und das System zum Absturz bringen. Das Überprüfen eingehender und ausgehender Ports, das Schließen aller nicht unbedingt notwendigen Prozesse und das Bereinigen verdächtiger Cronjobs gehören zur grundlegenden Systemhygiene und schützen gleichzeitig die Speicherressourcen.
Speicher- und Dateisysteme: ext4, XFS, Btrfs und Journaling
Auch wenn es wie ein separates Thema erscheint, beeinflussen die Wahl des Dateisystems und dessen Konfiguration das Speicherverhalten und die E/A-Last. Ext4 verwendet beispielsweise ein Journal, das je nach Auslastung zusätzlichen Druck auf die Festplatte und damit auf die Cache-Verwaltung ausüben kann.
In anspruchsvollen Serverumgebungen entscheiden sich viele Administratoren für XFS oder sogar Btrfs . XFS eignet sich typischerweise hervorragend für große Dateien und Hochleistungssysteme. Btrfs bietet erweiterte Funktionen wie Snapshots, transparente Komprimierung und Subvolumes, allerdings auf Kosten einer gewissen Komplexität und eines – je nach Version und Distribution – noch nicht abschließend bewerteten Reifegrads für alle Workloads.
Der Kernel passt seine Caching- und Write-Off-Strategie an die Eigenschaften des Dateisystems an, sodass der Wechsel von ext4 zu XFS oder Btrfs nicht nur die Roh-E/A beeinflusst, sondern auch die Art und Weise, wie RAM und Seitencache zum Puffern von Lese- und Schreibvorgängen verwendet werden.
Unverzichtbare grafische Werkzeuge und Hilfsprogramme für Administratoren
Das Terminal ist zwar nach wie vor das Schweizer Taschenmesser eines jeden Administrators, doch es gibt Tools, die die Verwaltung von Speicher und Ressourcen deutlich vereinfachen . Eines davon ist Glances , ein Echtzeit-Monitor, der CPU, Speicher, Festplatte, Netzwerk und Prozesse auf einem einzigen Bildschirm anzeigt und optional über eine Weboberfläche die Überwachung mehrerer Server im Browser ermöglicht.
Für eine schnelle Installation unter Debian einfach... sudo apt install glancesGlances ergänzt sehr gut mit htop, vmstat y sarund bietet so einen besseren visuellen Überblick darüber, wie sich das System unter Last verhält.
Im Bereich der grafischen Serveradministration bietet Cockpit eine benutzerfreundliche Weboberfläche zur Überwachung von Speicher, Prozessen und Diensten . Sie ermöglicht die Verwaltung mehrerer Server über eine einzige Konsole, das Starten und Stoppen von systemd-Units, die Überwachung der Swap- und ZRAM-Nutzung sowie die Auswertung von Protokollen, ohne den Browser zu verlassen.
Auf Desktop-Systemen integrieren viele Distributionen ihren eigenen Ressourcenmonitor, aber für Umgebungen ohne grafische Benutzeroberfläche oder wenn Sie etwas Leichtgewichtiges benötigen, bietet die Kombination dieser Konsolentools mit benutzerdefinierten Skripten einen hervorragenden Überblick darüber, was mit dem Speicher zu jedem Zeitpunkt geschieht.
Für ein optimales Speichermanagement unter Linux ist es wichtig zu verstehen, wie der Kernel RAM nutzt, welche Rolle Swap, zram und zswap spielen, wie cgroup v2 und die verschiedenen OOM-Fehler auf Speichermangel reagieren und welche Tools zur Überwachung und Feinabstimmung des Systems zur Verfügung stehen. Wenn Sie all diese Komponenten – von free, vmstat, PSS und memory.pressure bis hin zu zram, Swappiness und systemd-oomd – zusammenführen, gehören Probleme wie „Linux verbraucht zu viel RAM“ der Vergangenheit an. Stattdessen erhalten Sie ein optimal abgestimmtes, stabiles System, das die Hardwareleistung in jeder Umgebung – ob Server, Desktop oder Hochlastumgebung – maximiert.
Index
- 1 Grundlegende Konzepte und Mythen zum Thema Speicher in Linux
- 2 Virtueller Speicher, Seiten und interne Kernelstrukturen
- 3 Speichertypen: dateibasierter Speicher, anonymer Speicher und deren Beziehung zum Auslagerungsspeicher.
- 4 Speicherdruck, heftiges Umherwirbeln und OOM-Killer
- 5 Tausch: Was ist das, wie viel muss man einzahlen und warum ist es nicht „der Teufel“?
- 6 Speichermetriken: freier Speicher, vmstat, ps, RSS, PSS und mehr
- 7 Speicherfragmentierung, Stack, Heap und ulimit
- 8 Erweiterte Überwachung und Diagnose: top, htop, vmstat, sar und mehr
- 9 Praktisches Speichermanagement: Swap, Swappiness und Cache-Bereinigung
- 10 Erweiterte Steuerungswerkzeuge: cgroup v2, memory.pressure und OOM im Benutzermodus
- 11 Moderner Swap: zram, zswap und Geräteprioritäten
- 12 Speichermanagement auf Servern: Auslagerungsspeicher, Dienste und Sicherheit
- 13 Speicher- und Dateisysteme: ext4, XFS, Btrfs und Journaling
- 14 Unverzichtbare grafische Werkzeuge und Hilfsprogramme für Administratoren