- Linux nutzt den physischen Speicher als Cache und Puffer, daher bedeutet wenig "freier" RAM nicht unbedingt, dass ein Problem vorliegt.
- Die Kombination aus RAM, Auslagerungsspeicher, virtuellem Speicher und Seitencache ermöglicht die Prozessisolation und gewährleistet die Leistungsfähigkeit auch unter variierender Last.
- Tools wie free, htop, vmstat, pmap und cgroupv2 erleichtern die Diagnose und Begrenzung der Speichernutzung durch Prozesse und Dienste.
- Techniken wie zram, zswap, EarlyOOM oder systemd-oomd verbessern die Systemreaktion auf Speicherdruck und verhindern Abstürze.
Bei der Arbeit mit Linux-basierten Servern oder Desktop-PCs ist das Speichermanagement einer der Schlüsselfaktoren , der ein schnelles von einem langsamen System unterscheidet. Ob Debian, Ubuntu, AlmaLinux, CentOS oder eine andere Distribution – das Verständnis dafür, wie Linux RAM, Swap-Speicher und andere interne Mechanismen handhabt, ist entscheidend, um Abstürze, Leistungseinbrüche und Stabilitätsprobleme zu vermeiden.
Darüber hinaus reicht es in modernen Umgebungen, in denen anspruchsvolle Datenbanken, Container, vollständige Desktop-Systeme und ressourcenintensive Anwendungen laufen, nicht mehr aus, einfach nur „viel RAM zu haben“: Es ist unerlässlich zu wissen, dass … Wie Linux den Speicher nutzt und was die Indikatoren wirklich bedeuten was sehen wir in Werkzeuge wie top, htop, free o vmstatUnd welche Möglichkeiten haben wir, das Verhalten des Kernels, des Swap-Speichers, der Cgroups oder von Mechanismen wie zram, zswap, EarlyOOM oder systemd-oomd feinabzustimmen?
Grundlagen des Speichermanagements in Linux
Linux ist darauf ausgelegt, den verfügbaren Speicher optimal zu nutzen. Daher erscheint der Arbeitsspeicher (RAM) fast nie „leer“, da der Kernel ihn als Festplatten-Cache, Puffer und temporären Speicher verwendet , um den Zugriff auf Daten und Anwendungen zu beschleunigen. Dies führt häufig zu Missverständnissen: Wenig „freier“ Speicher ist kein Anzeichen für ein Problem, sondern bedeutet vielmehr, dass das System effizient arbeitet.
Die Speicherkapazität eines Computers hängt von der Architektur des Betriebssystems ab . Ein 32-Bit-System ist typischerweise auf etwa 4 GB adressierbaren Speicher beschränkt, während ein 64-Bit-System problemlos Dutzende oder Hunderte von Gigabyte verwalten kann. Theoretisch ermöglicht die 64-Bit-Architektur enorme Speichermengen (im Exabyte-Bereich), in der Praxis wird die tatsächliche Grenze jedoch durch die verwendete Hardware und den Kernel bestimmt.
Linux kombiniert Segmentierung und Paginierung zur Speicherorganisation. Der Speicher ist in Seiten fester Größe (typischerweise 4 KiB) unterteilt, die abgefragt werden können mit getconf PAGESIZEDer Kernel verwaltet interne Strukturen, sogenannte Seitentabellen, um virtuelle Adressen in physische Adressen zu übersetzen, Berechtigungen anzuwenden und den Zustand jeder Seite zu kontrollieren.
Der physische Speicher, also der im Computer installierte Arbeitsspeicher (RAM) , ist eine teure, aber extrem schnelle Ressource. Linux nutzt ihn für laufende Prozesse, Datencaches, gemeinsam genutzten Speicher, E/A-Puffer und interne Kernelstrukturen. Wenn Prozesse nicht den gesamten RAM auslasten, füllt das System die Lücke mit Festplatten-Caching, um den Zugriff auf langsamere Dateien und Speichermedien zu beschleunigen.
Da der Arbeitsspeicher (RAM) begrenzt ist, verwendet Linux virtuellen Speicher und Auslagerungsmechanismen, um den verfügbaren Speicherplatz logisch zu erweitern . Dadurch können Prozesse einen großen und zusammenhängenden Adressraum sehen, obwohl Seiten wiederverwendet und zwischen Arbeitsspeicher und darunterliegendem Sekundärspeicher verschoben werden.
Virtueller Speicher, physischer Speicher, Auslagerungsspeicher und Festplatte
Unter Linux wird der Begriff „virtueller Speicher“ häufig für den Speicherbereich verwendet, der jedem Prozess zugänglich ist. Dank der Kombination aus der MMU des Prozessors und den Seitentabellen des Kernels verfügt jedes Programm über einen eigenen, isolierten und geschützten Adressraum . Dieser Bereich ist wesentlich größer als der verfügbare Arbeitsspeicher (RAM) und nutzt sowohl physischen Speicher als auch Auslagerungs- und gemappte Dateien.
Der physische Speicher (RAM) ist der Ort, an dem die aktuell genutzten Seiten gespeichert werden. Für typische Arbeitslasten ist ausreichend RAM unerlässlich . Beispielsweise benötigt ein Server mit Datenbanken wie MongoDB mehr physischen Speicher als die Datenbank-Engine und andere Dienste benötigen, da die Leistung stark einbricht, wenn MongoDB intensiv auf Auslagerungsdateien zurückgreifen muss: Der RAM-Zugriff erfolgt in Nanosekunden, während der Festplattenzugriff in Millisekunden abläuft.
Der Auslagerungsspeicher fungiert als langsamere Erweiterung des Arbeitsspeichers (RAM) . Wenn der physische Speicher voll ist, kann Linux selten genutzte Seiten in den Auslagerungsspeicher verschieben. Dieser kann eine dedizierte Partition oder eine Datei innerhalb des Dateisystems sein. Beide Ansätze sind gültig; die Wahl hängt von den administrativen Richtlinien, der einfachen Verwaltung und den Anforderungen an den Ruhezustand ab.
Es ist wichtig, den Swap-Speicher zu entmystifizieren: Er ist nicht der Übeltäter. Er ist nicht per se gleichbedeutend mit einem langsamen System und sollte auch nicht nur im Notfall verwendet werden. Richtig konfiguriert, ermöglicht der Swap-Speicher die Freigabe von RAM durch inaktive, anonyme Seiten (z. B. Teile des Prozessspeichers, die lange nicht genutzt wurden) und schafft so Platz für neue, schnellere Ladevorgänge.
Neben Arbeitsspeicher (RAM) und Auslagerungsdatei spielen auch Speichermedien eine Rolle. Der Festplattenspeicher speichert persistente Daten, die Neustarts und Stromausfälle überstehen . Solange der Computer eingeschaltet ist, werden viele dieser Daten im RAM zwischengespeichert (Seitencache). Der Kernel entscheidet anhand von Nutzungsstatistiken, welche Seiten beibehalten und welche gelöscht werden, um kostspielige Festplattenzugriffe zu minimieren.
Wie die Speichernutzung in Linux abläuft
Der typische Datenfluss in einem Linux-System umfasst mehrere Komponenten: Benutzer oder Anwendungen generieren Anfragen, die das System in Speicher- und Festplattenzugriffe umsetzt . Vom Speicher gelesene Daten werden zunächst in den Arbeitsspeicher (RAM) geladen, wo sie im Seitencache gespeichert werden können. Bei einer erneuten Anfrage prüft der Kernel, ob die Daten bereits im Cache vorhanden sind, um einen erneuten Festplattenzugriff zu vermeiden.
Die CPU und die MMU sind ebenfalls an diesem Prozess beteiligt. Die CPU arbeitet mit virtuellen Adressen. Mithilfe von Seitentabellen übersetzt die Hardware jeden Zugriff in eine physische Adresse im RAM oder löst ihn mithilfe von Seitenfehlermechanismen auf, falls die Adresse nicht geladen ist. Wenn die Daten persistent gespeichert werden müssen, werden sie auf die Festplatte geschrieben. Während der Datenverarbeitung wird jedoch der schnellen Speicherung im Arbeitsspeicher Priorität eingeräumt, um die Leistung zu verbessern.
Wenn der RAM knapp wird, greift der Kernel mit seinen Speicherfreigabealgorithmen ein: Er gibt weniger genutzten Seitencache frei, komprimiert Speicherbereiche, greift auf Auslagerungsspeicher für Seiten mit niedrigerer Priorität zurück und kann, wenn die Situation kritisch wird, drastischere Maßnahmen ergreifen, wie z. B. die Aktivierung des OOM-Killers.
Speicherabbildung eines Prozesses in Linux
Jeder Prozess, der unter Linux ausgeführt wird, verfügt über eine Speicherabbildung oder ein Speicherlayout , das definiert, wie sein Adressraum organisiert ist: wo sich der ausführbare Code, globale Variablen, Heap, Stack, Befehlszeilenargumente, Umgebungsvariablen und gemeinsam genutzte Datei- oder Bibliothekszuordnungen befinden.
Diese Adresskarte ist üblicherweise in mehrere Segmente unterteilt. Am unteren Ende des virtuellen Adressraums befindet sich das Textsegment (der Binärcode des Programms), gefolgt von den initialisierten und nicht initialisierten Datensegmenten (BSS), dem Heap, in dem dynamische Speicherzuweisungen gespeichert werden, und schließlich dem Prozessstack ganz oben. Argumente und die Umgebung befinden sich ebenfalls im oberen Bereich des Adressraums.
Der Textbereich enthält die ausführbaren Anweisungen des Programms sowie die Anweisungen gemeinsam genutzter Bibliotheken . Er ist normalerweise schreibgeschützt und kann von mehreren Prozessen, die dieselbe Binärdatei ausführen, gemeinsam genutzt werden, wodurch physischer Speicherplatz gespart wird. Jeder Versuch, in diesen Bereich zu schreiben, führt zu einem Segmentierungsfehler.
Das initialisierte Datensegment speichert globale und statische Variablen, die zu Beginn einen Wert ungleich null besitzen. Dieses Segment lässt sich je nach Datentyp konzeptionell in einen schreibgeschützten und einen beschreibbaren Teil unterteilen. Das BSS-Segment hingegen gruppiert globale oder statische Variablen, die im Code keinen expliziten Wert haben oder mit null initialisiert werden.
Der Heap ist der Speicherbereich für die dynamische Speicherverwaltung, die von Befehlen wie `malloc`, `calloc` oder `realloc` gesteuert wird . Fordert ein Programm Speicher an, lädt der Benutzerspeichermanager diesen aus dem Heap. Gibt er ihn mit `free` frei, wird der Speicher zwar dem Heap hinzugefügt, aber nicht unbedingt dem Betriebssystem, was zu interner Fragmentierung führen kann. Der Stack ist für lokale Funktionsvariablen, Rücksprungadressen und Parameter reserviert und wird mit jedem Funktionsaufruf und dessen Rückkehr vergrößert oder verkleinert.
Wenn wir die Speicherbelegung eines laufenden Prozesses untersuchen wollen, verwenden wir Tools wie pmap Sie sind sehr nützlich. pmap <PID> Wir können die verschiedenen zugeordneten Regionen, ihre Größe, Berechtigungen, ob sie anonym sind oder mit Dateien verknüpft sind, sowie die Resident Size (RSS) im RAM und andere Metriken sehen, die helfen, den tatsächlichen Speicherverbrauch einer Anwendung zu verstehen.
Schlüsselkonzepte: Seiten, Seitenfehler und Cache
Die kleinste Speichereinheit in Linux ist die Speicherseite , typischerweise 4 KiB groß. Für bestimmte Arbeitslasten stehen jedoch auch größere Seiten (Huge Pages) zur Verfügung. Alle Entscheidungen des Kernels darüber, was verschoben, freigegeben oder zwischengespeichert werden soll, werden auf Seitenebene getroffen, nicht auf Byte-Ebene.
Seitentabellen sind hierarchische Strukturen, die vom Kernel verwaltet werden und angeben, wie virtuelle Adressen in physische Adressen übersetzt werden. Jeder Eintrag kann Informationen über Lese-, Schreib- und Ausführungsberechtigungen , den Seitenstatus (im Speicher, im Auslagerungsspeicher, geändert, gemeinsam genutzt usw.) und weitere Metadaten enthalten, die die MMU während der Übersetzung verwendet.
Ein Seitenfehler tritt auf, wenn ein Prozess auf eine gültige virtuelle Adresse zugreift, die zugehörige Seite aber noch nicht verfügbar ist: Sie ist möglicherweise noch nicht zugewiesen, befindet sich auf der Festplatte oder muss initialisiert werden. Der Kernel greift ein, um die Seite zu finden oder zu erstellen . Befindet sich die Seite im Arbeitsspeicher, wurde aber nicht korrekt markiert, sind die Kosten des Fehlers gering; muss sie von der Festplatte (Auslagerungsspeicher oder Datei) geladen werden, sind die Kosten deutlich höher.
Der Seitencache ist eines der großen Geheimnisse der hohen Leistungsfähigkeit von Linux. Der Kernel speichert Dateidaten und Metadaten im Arbeitsspeicher (RAM) , um Lese- und Schreibvorgänge zu beschleunigen und die Anzahl der Festplattenzugriffe drastisch zu reduzieren. Obwohl es daher so aussieht, als sei wenig freier Speicher vorhanden, ist tatsächlich ein Großteil des RAM verfügbar: Der Kernel kann Cache-Speicher schnell freigeben, wenn Anwendungen mehr benötigen.
Innerhalb des virtuellen Raums unterscheiden wir außerdem zwischen Dateispeicher, der mit zugeordneten Dateien verknüpft ist (z. B. dem Code von Binärdateien und Bibliotheken oder Dateien, die explizit zugeordnet sind mit mmap) und anonymem Speicher, der dem Heap, dem Stack und anderen Abbildungen ohne Dateisicherungen entspricht. Letzterer kann nur bei Bedarf ausgelagert werden, weil Es existiert keine Datei, aus der sie neu generiert werden kann..
Speicherdruck, heftiges Umherwirbeln und OOM
Wenn die Anzahl freier Seiten unter bestimmte Schwellenwerte fällt, gerät das System in einen Zustand erhöhter Speicherauslastung . In diesem Fall muss der Kernel mehr Zeit damit verbringen, Seiten zu finden, die freigegeben, komprimiert oder in den Auslagerungsspeicher verschoben werden können, was die Gesamtleistung beeinträchtigt.
Auf Webservern kann eine hohe Speicherauslastung zu erhöhter Latenz führen : Die Server müssen warten, bis Seiten freigegeben werden, bevor sie Anfragen weiter bearbeiten können, und die CPU benötigt Rechenleistung für Speicherverwaltungsaufgaben anstatt für die eigentliche Datenverarbeitung. Auf Desktop-Computern äußert sich dies in Rucklern, träger Mausreaktion, nicht reagierenden Fenstern und sogar kurzen Systemabstürzen.
Bei Fernzugriffen via SSH, RDP oder VNC äußert sich dies in hängenden Befehlen, Verzögerungen bei der Eingabe und einer allgemein trägeren Interaktion. Wird zudem der Auslagerungsspeicher intensiv genutzt, kann dies zu einem sogenannten Thrashing-Zustand führen , in dem das System mehr Zeit mit dem Verschieben von Datenseiten zwischen RAM und Speicher verbringt als mit der Ausführung von nützlichem Code.
Thrashing tritt auf, wenn der Arbeitsspeicher (RAM) nicht ausreicht, um die aktiven Arbeitsprozesse aufrechtzuerhalten. Bei aktiviertem Swap-Speicher werden anonyme Seiten ständig zwischen RAM und Swap-Speicher hin- und hergeschoben, was zu Festplattenzugriffen führt. Ohne Swap-Speicher kann der Kernel diese anonymen Seiten nicht speichern, und die einzige Lösung besteht darin, Prozesse mithilfe des OOM-Killers zu beenden.
Auch ohne Auslagerungsspeicher kann es zu Dateispeicher-Thrashing kommen: Seiten, die zum Dateicache gehören, werden ausgeworfen und kontinuierlich von der Festplatte neu geladen, und zwar so schnell, wie es die Anwendungen benötigen. Dies führt zu einer Schleife von E/A-Aktivitäten und extremer Langsamkeit.
Wenn der Kernel alle Möglichkeiten zur Speicherbeschaffung ausgeschöpft hat – Cache freigeben, Seiten in den Auslagerungsspeicher verschieben, Speicher komprimieren und Cgroups-Richtlinien anwenden –, gerät er in einen Out-of-Memory-Zustand (OOM) . In diesem Fall muss der OOM-Killer einen oder mehrere Prozesse beenden, um Speicher freizugeben und das restliche System zu schützen.
Um den zu beendenden Prozess auszuwählen, berechnet der Kernel einen oom_score für jeden PID-Regler, basierend auf Faktoren wie dem Speicherverbrauch, der Wichtigkeit des Prozesses und anderen internen Parametern. Dieses Verhalten kann modifiziert werden durch oom_score_adjwodurch die Gewichtung eines bestimmten Prozesses angepasst wird. Werkzeuge wie beispielsweise choom Sie ermöglichen es Ihnen, diese Werte einfach anzuzeigen und zu ändern.
Tausch: Mythen, bewährte Verfahren und moderne Varianten
Swap hat einen etwas ungerechtfertigt schlechten Ruf. Viele Benutzer glauben, es sei etwas, das man um jeden Preis vermeiden sollte, oder dass es nur bei sehr begrenztem Arbeitsspeicher sinnvoll sei. Unter Linux ist Swap jedoch Teil der gesamten virtuellen Speicherstrategie : Es ermöglicht dem Kernel, inaktive anonyme Seiten aus dem Arbeitsspeicher auszulagern, um aktive Daten und den Seitencache zu priorisieren.
Es ist falsch, Swap als „letzten Ausweg“ zu betrachten, der nur dann zum Einsatz kommt, wenn alle anderen Möglichkeiten versagen. Tatsächlich verschafft Swap dem Kernel selbst auf Systemen mit viel RAM mehr Spielraum, um den Hauptarbeitsbereich flexibel zu halten und den physischen Speicher besser zu nutzen. Allerdings ist es richtig, dass die Leistung spürbar leidet, wenn die Swap-Aktivität sehr hoch und anhaltend ist.
In der Praxis ist die alte Regel, dass der Swap-Speicher das 1- bis 2-fache des RAM-Speichers betragen sollte, nicht mehr unumstößlich. Auf Servern mit viel Arbeitsspeicher ist es üblicher, proportional einen deutlich kleineren Swap-Speicher zuzuweisen oder diesen sogar mithilfe von Technologien wie zram oder zswap im RAM zu komprimieren , um die Leistung zu verbessern und die Festplattenzugriffe zu reduzieren.
Ein weiterer Anwendungsfall für Swap-Speicher ist der Ruhezustand: Das System kann den Inhalt des Arbeitsspeichers in den Swap-Speicher auslagern und vollständig herunterfahren, um beim Neustart seinen ursprünglichen Zustand wiederherzustellen. Dies setzt voraus, dass der verfügbare Swap-Speicher mindestens so groß ist wie der zu sichernde Speicherplatz. Dieser Faktor beeinflusst die Wahl zwischen Lösungen wie zram (die keinen Ruhezustand ermöglichen) und herkömmlichem Festplatten-Swap.
In den letzten Jahren wurde auch über fragwürdiges Verhalten des OOM-Killers in einigen Kerneln berichtet, bei denen das System abstürzt, bevor der OOM-Killer aktiv wird. In bestimmten Fällen kann die Aktivierung von Abkürzungen wie … Alt+SysRq+F (nach Aktivierung des Parameters) /proc/sys/kernel/sysrqDies ermöglicht es, den OOM-Killer zur Wiederherstellung eines scheinbar eingefrorenen Systems zu zwingen. Darüber hinaus wurden Daemons wie EarlyOOM, nohang und systemd-oomd genau zu dem Zweck entwickelt, zu reagieren, bevor der Kernel in extreme Situationen gerät.
Werkzeuge zur Überwachung und Verwaltung des Speichers
Um Speicherprobleme zu vermeiden, ist es wichtig, die richtigen Werkzeuge zu verwenden. Befehle wie free, top, htop, vmstat, ps o sar bieten a eine sehr detaillierte Röntgenaufnahme des Zustands des Systems, sowohl in Echtzeit als auch im Zeitverlauf.
Der Befehl free Es zeigt schnell den Gesamtspeicher, den belegten Speicher, den freien Speicher, den Cache-Speicher und die Puffer sowie Auslagerungsinformationen an. Dies ist sehr nützlich, um zu überprüfen, ob tatsächlich ein Mangel an physischem Speicher besteht oder ob der größte Teil lediglich zwischengespeichert ist und problemlos wiederverwendet werden kann.
Der Klassiker top und seine verbesserte Variante htop Sie ermöglichen es Ihnen, den CPU- und Speicherverbrauch pro Prozess sowie die Systemlast, die Betriebszeit, die Swap-Nutzung und andere Indikatoren in Echtzeit einzusehen. htop bietet eine benutzerfreundlichere Oberfläche.Mit Farbbalken und Tastenkombinationen zum schnellen Sortieren, Filtern oder Beenden von Prozessen.
Der Befehl vmstat Es bietet eine technischere Sicht: Speicherstatistiken, Prozesse, Paging, Interrupts und CPU-Scheduling. Es eignet sich ideal zum Erkennen übermäßiger Seitenfehler, hoher Swap-Aktivität oder eines Thrashing-Musters. ps Es ermöglicht Ihnen, Prozesse sehr detailliert aufzulisten, einschließlich Spalten für den residenten Speicher (RSS), den virtuellen Speicher (VSZ) und andere Parameter, die dabei helfen, Anwendungen zu finden, die "ausgelöst" wurden.
In Debian- oder AlmaLinux-Umgebungen werden Pakete wie z. B. sysstat Sie bieten zusätzliche Befehle an, wie zum Beispiel sar, was kann Speichernutzung im Zeitverlauf aufzeichnenDadurch ist es möglich, Verbrauchsspitzen mit geplanten Aufgaben, Bereitstellungen oder bestimmten Ereignissen zu korrelieren und die Systemkonfiguration entsprechend anzupassen.
Um die Speicherbelegung eines bestimmten Prozesses zu untersuchen, zusätzlich zu pmapEs ist immer eine gute Idee, das Pseudo-Dateisystem zu erkunden. /procwobei jeder Prozess sein eigenes Verzeichnis mit detaillierten Informationen hat, einschließlich seiner Speicherabbildung in /proc/<PID>/maps und Statistiken in /proc/<PID>/smaps.
Grundlegende Optimierung: Swap, Cache und Swappiness
Über die Theorie hinaus gibt es mehrere einfache praktische Maßnahmen, um Feinabstimmung der Speicherverwaltung in Linux ohne dabei verrückt zu werden. Eines der ersten Dinge, die man tun sollte, ist, den Tauschstatus zu überprüfen mit swapon --show Erstellen Sie gegebenenfalls eine Auslagerungsdatei, anstatt sich ausschließlich auf eine Partition zu verlassen. Dies ermöglicht die flexible Anpassung der Größe, ohne die Festplatten neu partitionieren zu müssen.
Parameter vm.swappiness Diese Einstellung steuert, wie aggressiv der Kernel den Auslagerungsspeicher nutzt und wie oft er den Cache freigibt. Ein hoher Wert führt zu einer häufigeren Nutzung des Auslagerungsspeichers; ein niedriger Wert reserviert den Auslagerungsspeicher für extreme Fälle und priorisiert die Datenhaltung im Arbeitsspeicher. Einstellungen wie beispielsweise Swappiness=10 Sie funktionieren in vielen Desktop- und ressourcenschonenden Serverumgebungen in der Regel gut und können temporär eingesetzt werden mit Kerneloptimierung mit sysctl oder anhaltend in /etc/sysctl.conf.
In ganz bestimmten Situationen, in denen wir den Cache manuell leeren möchten – beispielsweise nach einer intensiven Leselast, die bereits abgeschlossen ist – können wir auf die entsprechende Einstellung zurückgreifen. vm.drop_cachesKombinieren sync Durch das Schreiben eines geeigneten Wertes (1, 2 oder 3) in diesen Parameter verwirft der Kernel bestimmte Caches. Es empfiehlt sich jedoch, ihn mit Bedacht einzusetzen, denn Der Cache ist kein "verschwendeter Speicher".aber eine bedeutende Optimierung.
Bei Distributionen wie Debian und AlmaLinux ist es üblich, diese Einstellungen durch eine gute Überwachung ressourcenintensiver Prozesse zu ergänzen. htop o psIdentifizieren von Diensten oder Anwendungen, die viel Speicherplatz belegen, und gegebenenfalls deren Neukonfiguration oder Begrenzung ihres Speicherverbrauchs.
Das Erstellen und Anpassen des Auslagerungsbereichs ist ein relativ einfacher Vorgang: Man reserviert einfach eine Datei mit fallocateWeisen Sie ihm die korrekten Berechtigungen zu und initialisieren Sie es als Swap-Speicher. mkswap und aktivieren Sie es mit swaponUm die Änderung dauerhaft zu machen, wird ein geeigneter Eintrag hinzugefügt in /etc/fstab Dies bedeutet, dass diese Datei bei jedem Systemstart als Auslagerungsdatei verwendet wird.
Erweiterte Techniken: zram, zswap, cgroupv2 und OOM im Benutzermodus
Wenn wir die Optimierung noch einen Schritt weiter treiben wollen, kommen fortgeschrittene Mechanismen wie zram, zswap, Namespaces und Cgroups zum Einsatz , zusätzlich zu Daemons wie EarlyOOM, nohang oder systemd-oomd, die darauf ausgelegt sind, den Speicher optimal zu nutzen und die Systemreaktion unter Last zu verbessern.
zram verwendet ein Kernelmodul, um komprimierte Blockgeräte direkt im RAM zu erstellen. Auf diesen Geräten kann ein Auslagerungsspeicher eingebunden werden, sodass Seiten vor dem Speichern komprimiert werden. In der Praxis wird dadurch der verfügbare Speicher besser genutzt, allerdings auf Kosten von CPU-Zeit für die Komprimierung. Zudem entfällt das Schreiben auf die Festplatte, allerdings geht dadurch die Möglichkeit zum Ruhezustand verloren.
zswap fungiert als komprimierter Cache für den eigentlichen Auslagerungsspeicher auf der Festplatte. Die auszulagernden Seiten werden zunächst komprimiert im Arbeitsspeicher (RAM) gespeichert und erst dann in den herkömmlichen Auslagerungsspeicher geschrieben, wenn dieser Cache voll ist oder die Seiten entfernt werden. Dies reduziert die Festplattenzugriffe, verlängert die Lebensdauer von SSDs und verbessert die Leistung bei moderater Auslagerungsnutzung.
Im Bereich der Ressourcenkontrolle bietet cgroupv2 einen leistungsstarken Mechanismus zur Organisation von Prozessen in Hierarchien und zur Zuweisung von Speicher, CPU und anderen Ressourcen. Dies wird durch Parameter wie beispielsweise … erreicht. memory.low oder Dateien wie memory.pressureSie können dem Kernel mitteilen, welche Gruppen Priorität haben, und die Zeit überwachen, die Aufgaben aufgrund von Speichermangel blockiert sind, wobei Sie unterscheiden können, ob das Problem nur einige Aufgaben oder die gesamte Gruppe betrifft.
In Szenarien, in denen Systemabstürze unbedingt vermieden werden müssen, haben sich mehrere Benutzerspeicherdienste etabliert, um OOM-Situationen proaktiver zu managen. EarlyOOM überwacht regelmäßig RAM und Swap-Speicher und erkennt, wenn beide unter bestimmte Schwellenwerte fallen (Standardmäßig weniger als 10 % kostenlos um mit dem Handeln zu beginnen), sendet Signale an die Prozesse mit größerer Geschwindigkeit. oom_score um Speicher freizugeben, bevor es zu einer Kernelpanik kommt.
nohang bietet einen ähnlichen, aber flexibleren Ansatz mit Unterstützung für zram, Analyse des Speicherverbrauchs und der Möglichkeit, benutzerdefinierte Aktionen bei drohendem Absturz zu definieren. Obwohl das Projekt im Vergleich zu anderen etwas an Aktivität eingebüßt hat, bleibt es eine attraktive Option für fortgeschrittene Nutzer, die genau steuern möchten, welche Prozesse wann beendet werden.
Schließlich bietet systemd-oomd, ursprünglich von Facebook entwickelt und mittlerweile in viele Distributionen mit modernem systemd integriert, eine Lösung für großflächige Installationen und Desktop-Umgebungen. Es überwacht Cgroup-Grenzwerte, Speicherauslastung und weitere Indikatoren und entscheidet, welche Einheiten oder Dienste beendet werden müssen, um die Systemnutzbarkeit wiederherzustellen. Damit fungiert es als ausgefeiltere Ergänzung zum klassischen OOM-Killer des Kernels.
Gute Praktiken zur Vermeidung von Gedächtnisproblemen
Im täglichen Gebrauch empfiehlt es sich, neben der Anpassung spezifischer Parameter, einige bewährte Methoden zu befolgen, um speicherbezogene Probleme unter Linux zu minimieren. Die erste Methode besteht darin, RAM und Swap-Speicher entsprechend der tatsächlichen Arbeitslast zu dimensionieren: Datenbanken, Anwendungsserver, ressourcenintensive Desktop-Umgebungen oder mehrere Container benötigen mehr Speicher als einfache Dienste.
Auf Servern empfiehlt es sich, regelmäßig zu überprüfen, welche Dienste laufen, und nicht benötigte Dienste zu deaktivieren oder zu beenden . In Umgebungen mit Docker oder anderen Containern ist es ratsam, nach Abschluss von Tests oder temporären Bereitstellungen nicht mehr benötigte Container, Images und Volumes zu bereinigen, um zu verhindern, dass Restprozesse unbemerkt Speicher belegen.
RAM-Disks sind ein nützliches Werkzeug, um bestimmte temporäre Aufgaben zu beschleunigen: Ein Dateisystem wird im Arbeitsspeicher (RAM) definiert und dient zum Zwischenspeichern von Anwendungsdaten oder häufig genutzten Arbeitsbereichen. Da sie flüchtig sind, gehen ihre Inhalte beim Ausschalten oder Neustart des Computers verloren. Im Gegenzug sind sie jedoch um ein Vielfaches schneller als SSDs , was bei intensiven temporären Lese- und Schreibvorgängen von großem Vorteil ist.
Aus Sicherheitsgründen ist es wichtig, offene Ports zu überwachen und nur die unbedingt notwendigen freizugeben. Malware-Angriffe, wie beispielsweise Kryptominer, hinterlassen oft Spuren in Form von Prozessen, die enorme Mengen an CPU und Arbeitsspeicher verbrauchen und schädliche Aufgaben installieren können. crontab Um den Betrieb aufrechtzuerhalten, ist es wichtig, verdächtige Cronjobs zu überprüfen und zu bereinigen sowie nicht benötigte Ports zu schließen, um zu verhindern, dass unerwünschte Prozesse Speicherplatz belegen.
Schließlich sollte der Einfluss des Dateisystems auf die Gesamtleistung nicht außer Acht gelassen werden. Moderne Optionen wie XFS oder Btrfs können in bestimmten Szenarien Vorteile gegenüber ext4 bieten, insbesondere bei hoher Auslastung oder der Nutzung erweiterter Funktionen. Jeder Fall erfordert Tests, aber die Wahl des Dateisystems beeinflusst auch die Verarbeitung von Metadaten und den Festplattenzugriff und wirkt sich somit indirekt auf die wahrgenommene Systemleistung aus.
Die Beherrschung des Speichermanagements unter Linux erfordert ein Verständnis der RAM-, Swap- und Speicherverwaltung, der Rolle von Konzepten wie Seiten, Seitencache, Speicherdruck und OutOfMemory-Fehler sowie der Anwendung fortgeschrittener Tools und Mechanismen wie zram, zswap, cgroupv2 und systemd-oomd. Mit diesem Wissen lässt sich jede Maschine – vom einfachen Laptop bis zum produktiven Server mit vielen Diensten – deutlich einfacher optimieren, sodass der Speicher keine Fehlerquelle mehr darstellt, sondern zu einem wertvollen Helfer für ein agiles und stabiles System wird, das auch Lastspitzen problemlos bewältigt.
