[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Hängt, aut of memory mit 64 GB Ram...



Am Montag, 8. Oktober 2012 schrieb David Raab:
> > Ich habe es damals(TM) schon geschafft innerhalb von Sekunden 32GB
> > RAM mit Hilfe einer (ganz schlecht strukturierten/durchdachten)
> > Datenbankabfrage voll laufen zu lassen, dank SWAP konnte der Prozess
> > gestoppt werden. Ansonsten wäre der Rechner wohl eingefroren.
> 
> Ein Rechner friert nicht ein wenn kein RAM mehr da ist. Wenn eine
> Applikation neuen RAM anfordert und es ist keiner mehr da, dann wird
> die Anwendung mit einem "oom" (out of memory) beendet.

Das trifft so meines Wissens nicht zu.

Wenn eine Anwendung physikalischen Speicher anfordert oder aber 
offensichtlich einen viel zu großen Speicher- oder genauer Adreßraum-
Bereich, dann schlägt die Anforderung fehl und das Programm reagiert dann 
mehr oder weniger angemessen darauf. Im Idealfall mit einer Fehlermeldung, 
bei fehlender Fehlerbehandlung mitunter aber auch mit einem Absturz.

Ein Problem entsteht, wenn Anwendungen im Rahmen der Overcommit-Strategie, 
dem Pokerspielen der virtuellen Speicherverwaltung des Kernels erlaubte 
virtuelle Speichermengen anfordern. Der Kernel macht erst mal gar nichts, 
außer sich zu merken, dass die Anwendung den Adreßraum nun hat. Und er 
überbucht. Wie eine Bank, die weniger Geld verfügbar hat als das 
Anlagevermögen aller Kundenkonten.

Schreiben nun Anwendungen lustig in ihren neu belegten virtuellen 
Speicherbereichen herum, dann ist es aus mit dem Pokerspielen. Der Kernel 
muss physikalischen Speicherbereich bereitstellen, den er der Anwendung 
versprochen hat. Genau wie eine Bank, wenn die Kunden plötzlich alle auf 
einmal ihr Geld abheben.

Zusätzlich dazu entsorgt der Kernel nicht notwendigerweise den Prozess, 
der gerade Speicher anfordert. Vielmehr löst eine Anwendung durch ihre 
Aktionen, wie z.B. eine Speicheranforderung oder das Schreiben in noch 
nicht beschriebenen virtuellen Adreßraum, eine Speichermangel-Situation 
aus. Und der Out Of Memory Killer sucht sich dann – im Idealfall – nur 
einen einzigen Prozess aus, den er entsorgt. Was im Falle des OP ja nicht 
geklappt hat :)

Dabei beachtet er gewisse Kriterien, die lange Zeit auf den virtuellen 
Speicherverbrauch abzielten und weitere Faktoren in einer komplizierten 
Heuristik mit einschlossen, mittlerweile aber hauptsächlich den 
physikalischen Speicherverbrauch berücksichtigen. Näheres dazu dann im 
oom_kill.c des jeweiligen Kernel-Quelltextes.

-- 
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7


Reply to: