Nicht genügend Speicher

Out of Memory (OOM) ist ein häufig unerwünschter Zustand des Computerbetriebs, bei dem kein zusätzlicher Speicher für die Verwendung durch Programme oder das Betriebssystem zugewiesen werden kann. Letztere können keine zusätzlichen Programme laden, und da viele Programme während der Ausführung zusätzliche Daten in den Speicher laden müssen, funktionieren diese nicht mehr ordnungsgemäß. Diese Situation tritt normalerweise auf, wenn der gesamte verfügbare Speicher, einschließlich des Speicherplatzes für die Festplatte, zugewiesen wurde.

Geschichte

In der Vergangenheit war die Situation mit zu wenig Arbeitsspeicher häufiger als heute, da frühe Computer und Betriebssysteme auf kleine Mengen an Arbeitsspeicher (RAM) beschränkt waren, da frühe Prozessoren nicht in der Lage waren, auch große Mengen an Speicher zu verarbeiten als Kostenüberlegungen. Da das Aufkommen des virtuellen Speichers die Tür für die Nutzung von Swap Space öffnete, ist die Bedingung weniger häufig. Fast alle modernen Programme erwarten, dass sie während der Ausführung Speicher frei zuweisen und freigeben können, und neigen dazu, unkontrolliert zu versagen (Absturz), wenn diese Erwartung nicht erfüllt wird. Die Älteren haben oft nur einmal Speicher zugewiesen, überprüft, ob sie genug haben, um ihre ganze Arbeit zu erledigen, und haben dann nicht damit gerechnet, dass sie welche haben. Daher sind sie entweder sofort mit der Fehlermeldung "Nicht genügend Speicher" fehlgeschlagen oder sie haben die erwartete Leistung erbracht.

Frühe Betriebssysteme wie MS-DOS unterstützten Multitasking nicht . Den Programmen wurde physischer Speicher zugewiesen, den sie nach Bedarf verwenden konnten. Der physische Speicher war häufig eine knappe Ressource, und wenn er durch Anwendungen wie die mit den Funktionen " Beenden" und "Resident bleiben" erschöpft wurde , konnte keine andere Anwendung gestartet werden, bis die ausgeführten Anwendungen geschlossen wurden.

Moderne Betriebssysteme bieten virtuellen Speicher, in dem Prozessen ein Speicherbereich zugewiesen wird, der Speicher jedoch nicht direkt dem RAM entspricht. Der virtuelle Speicher kann dem RAM zugeordnet werden, über mmap oder Swap Space abgelegt werden , und das Betriebssystem kann die Seiten des virtuellen Speichers nach Bedarf verschieben. Da der virtuelle Speicher nicht durch physischen Speicher gesichert werden muss, ist seine Erschöpfung selten und es gibt normalerweise andere vom Betriebssystem auferlegte Einschränkungen für den Ressourcenverbrauch.

Wie das Mooresche Gesetz vorausgesagt hat , hat die Menge an physischem Speicher auf allen Computern fast exponentiell zugenommen, obwohl dies in gewissem Maße durch die Zunahme der Größe der Programme und der Dateien selbst ausgeglichen wird. In einigen Fällen verfügt ein Computer mit virtuellem Speicher, auf dem sich die meisten geladenen Daten auf der Festplatte befinden, möglicherweise nicht über genügend physischen Speicher, jedoch nicht über virtuellen Speicher, was zu übermäßigem Paging führt . Dieser als Thrashing bezeichnete Zustand macht den Computer normalerweise unbrauchbar, bis bestimmte Programme gestoppt oder der Computer neu gestartet wird. Aus diesen Gründen stoßen Anwendungen auf modernen Computern selten auf eine Meldung, dass nicht genügend Speicher vorhanden ist.

Es ist jedoch immer noch möglich, mit einem modernen Computer auf einen OOM-Zustand zu stoßen. Der typische Fall von OOM in modernen Computern tritt auf, wenn das Betriebssystem keinen virtuellen Speicher mehr erstellen kann, weil alle potenziellen Sicherungsgeräte voll sind, oder wenn der Endbenutzer sie deaktiviert hat.

Verwalten des Speichermangels

Kernel in Betriebssystemen wie Linux versuchen, diese Art von OOM-Zustand wiederherzustellen, indem sie einen oder mehrere Prozesse beenden, einen Mechanismus, der als OOM Killer bekannt ist .

Linux 4.6 (veröffentlicht inMai 2016) führten Änderungen in OOM-Situationen ein und verbesserten die Erkennung und Zuverlässigkeit. Die Unterstützung für cgroups in OOM Killer wurde in Linux Kernel 4.19 implementiert, das in veröffentlicht wurdeOktober 2018, was die Fähigkeit hinzufügte, eine cgroup als Einheit zu töten .

Speichergrenzen pro Prozess

Zusätzlich zu den systemweiten physischen Speicherbeschränkungen begrenzen einige Systeme die Speichermenge, die jeder Prozess verwenden kann. Normalerweise kann eine solche Einschränkung auch auftreten, wenn das Betriebssystem einen größeren Adressraum als den auf Prozessebene verfügbaren hat. Einige High-End- 32-Bit- Systeme (z. B. solche mit aktivierter physischer Adresserweiterung ) verfügen über einen Systemspeicher von 8 Gigabyte oder mehr, obwohl ein einzelner Prozess in einem 32-Bit- Modell mit flachem Speicher  (in) nur auf 4 GB zugreifen kann .

Bei einem Prozess, der sein pro-Prozess-Limit überschreitet und dann versucht, zusätzlichen Speicher zuzuweisen, tritt eine Fehlerbedingung auf. Beispielsweise gibt die Standard-C-Funktion für die Speicherzuweisung malloc ()NULL zurück, und eine gültige Anwendung sollte diese Situation behandeln.

Verweise

  1. "  So konfigurieren Sie den Linux Out-of-Memory Killer  " (abgerufen am 19. Februar 2015 )
  2. „Auf dem  Weg zu einer vorhersehbareren und zuverlässigeren Handhabung von Speichermangel [LWN.net]  “ , lwn.net
  3. "  Linux_4.6 - Linux Kernel Newbies  " , kernelnewbies.org
  4. "  Linux_4.19 - Linux Kernel Newbies  " , kernelnewbies.org

Externe Links