Nicht mehr im Gedächtnis - Out of memory

Nicht genügend Arbeitsspeicher Bildschirmanzeige auf einem System mit Linux Mint 9 (Kernel 2.6.32)

Out of Memory ( OOM ) ist ein oft unerwünschter Zustand des Computerbetriebs, bei dem kein zusätzlicher Speicher für die Verwendung durch Programme oder das Betriebssystem zugewiesen werden kann. Ein solches System kann keine zusätzlichen Programme laden, und da viele Programme während der Ausführung möglicherweise zusätzliche Daten in den Speicher laden, werden diese nicht mehr richtig funktionieren. Dies geschieht in der Regel , weil alle verfügbaren Speicher, einschließlich Disk Swap - Speicher , zugeordnet worden ist .

Geschichte

In der Vergangenheit war die Bedingung nicht genügend Arbeitsspeichers häufiger als heute, da frühe Computer und Betriebssysteme aufgrund der Unfähigkeit früherer Prozessoren, große Speichermengen zu adressieren, auf kleine Mengen an physischem Direktzugriffsspeicher (RAM) beschränkt waren sowie Kostenüberlegungen. Da das Aufkommen des virtuellen Speichers die Tür für die Nutzung von Auslagerungsraum geöffnet hat, ist die Bedingung seltener. Fast alle modernen Programme erwarten, dass sie zur Laufzeit Speicher frei zuweisen und freigeben können, und neigen dazu, unkontrolliert zu scheitern (Absturz), wenn diese Erwartung nicht erfüllt wird; ältere haben oft nur einmal Speicher zugewiesen, überprüft, ob sie genug für ihre ganze Arbeit haben, und dann erwartet, dass nichts mehr kommt. Daher würden sie entweder sofort mit einer Fehlermeldung "Nicht genügend Arbeitsspeicher" fehlschlagen oder wie erwartet funktionieren.

Frühen Betriebssystemen wie MS-DOS fehlte die Unterstützung für Multitasking . Den Programmen wurde physischer Speicher zugewiesen, den sie nach Bedarf verwenden konnten. Physischer Speicher war oft eine knappe Ressource, und wenn er durch Anwendungen wie solche mit Terminate- und Stay Resident- Funktionalität erschöpft war , konnten keine weiteren Anwendungen gestartet werden, bis laufende Anwendungen geschlossen wurden.

Moderne Betriebssysteme bieten virtuellen Speicher, bei dem Prozessen ein Speicherbereich zugewiesen wird, der Speicher jedoch nicht direkt dem tatsächlichen physischen RAM entspricht. Der virtuelle Speicher kann durch physischen RAM, eine Festplattendatei über mmap (unter Unix- Derivaten) oder MapViewOfFile (unter Windows) oder Swap-Speicher gesichert werden, und das Betriebssystem kann virtuelle Speicherseiten nach Bedarf verschieben. Da virtueller Speicher nicht durch physischen Speicher unterstützt werden muss, ist dieser selten erschöpft, und normalerweise gibt es andere Beschränkungen des Betriebssystems für den Ressourcenverbrauch.

Wie vom Mooreschen Gesetz vorhergesagt , ist die Menge des physischen Speichers in allen Computern fast exponentiell gewachsen, obwohl dies zu einem gewissen Grad durch die Größe der Programme und Dateien selbst ausgeglichen wird. In einigen Fällen kann einem Computer mit Unterstützung für virtuellen Speicher, bei dem sich der Großteil der geladenen Daten auf der Festplatte befindet, der physische Speicher, aber nicht der virtuelle Speicher ausgehen, was zu übermäßigem Paging führt . Dieser als Thrashing bezeichnete Zustand macht den Computer normalerweise unbrauchbar, bis einige Programme geschlossen oder der Computer neu gestartet wird. Aus diesen Gründen wird bei Anwendungen mit modernen Computern selten auf eine Meldung über fehlenden Speicher gestoßen.

Es ist jedoch immer noch möglich, mit einem modernen Computer auf eine OOM-Bedingung zu stoßen. Der typische OOM-Fall bei modernen Computern tritt auf, wenn das Betriebssystem keinen virtuellen Speicher mehr erstellen kann, weil alle seine potenziellen Sicherungsgeräte gefüllt sind oder der Endbenutzer sie deaktiviert hat. Die Bedingung kann aufgrund von Copy-on-Write nach fork() auftreten.

Keine Speicherverwaltung

Die Kernel von Betriebssystemen wie Linux versuchen, sich von dieser Art von OOM-Bedingungen zu erholen, indem sie einen oder mehrere Prozesse beenden, ein Mechanismus, der als OOM Killer bekannt ist . Linux 4.6 (veröffentlicht Mai 2016) eingeführten Änderungen in OOM Situationen, die Verbesserung der Erkennung und Zuverlässigkeit., Cgroup Bewusstsein in OOM Killer in implementiert wurde Linux - Kernel 4.19 im Oktober 2018 veröffentlicht, die die Fähigkeit verleiht ihm einen cgroup als eine einzige Einheit zu töten.

Aufgrund der späten Aktivierung von OOM Killer auf einigen Linux-Systemen gibt es mehrere Daemons und Kernel-Patches, die helfen, Speicher aus dem OOM-Zustand wiederherzustellen, bevor es zu spät war.

  • earlyoom
  • nohang
  • PSI-Kernel-Patches (Pressure Stall Information) und dem dazugehörigen oomdDaemon, die Patches werden im Linux-Kernel 4.20 zusammengeführt.

Speichergrenzen pro Prozess

Abgesehen von den systemweiten physischen Speichergrenzen begrenzen einige Systeme die Speichermenge, die jeder Prozess verwenden kann. Normalerweise kann eine solche Einschränkung auch richtlinienbedingt sein, wenn das Betriebssystem über einen größeren Adressraum verfügt, als auf Prozessebene verfügbar ist. Einige High-End- 32-Bit- Systeme (z. B. mit aktivierter Physical Address Extension ) verfügen über 8 Gigabyte oder mehr Systemspeicher, obwohl jeder einzelne Prozess nur auf 4 GB davon in einem 32-Bit- Flat-Memory-Modell zugreifen kann .

Ein Prozess, der sein Pro-Prozess-Limit überschreitet und dann versucht, weiteren Speicher zuzuweisen, wird auf eine Fehlerbedingung stoßen. Zum Beispiel kann der C - Standardfunktionsspeicher für die Zuteilung, malloc()wird, zurückgeben NULL und eine gut erzogene Anwendung sollte mit dieser Situation umgehen.

Verweise

Externe Links