Sie haben das Problem mit Linux Ate My Ram .
Keine Panik.
Das ist kein Problem.
Ihr System arbeitet wie vorgesehen.
Das Problem ist nicht Ihr Betriebssystem - das Problem ist, dass Sie verstehen, was "freier" Speicher ist.
Unix-Systeme verwenden Speicher nicht nur zum Ausführen von Programmen. Speicher kann verwendet werden für:
- Laufende Programme (aktiv / verwendet)
- Zwischenspeichern von Daten während der Übertragung (Puffer)
- Zwischenspeichern von kürzlich von der Festplatte gelesenen / auf die Festplatte geschriebenen Daten (Cache)
- Absolut nichts (kostenlos)
Es folgt eine kurze (und weitgehend unvollständige) Übersicht darüber, wie moderne Unix-Systeme die RAM-Auslastung melden.
Was ist freier Speicher (die Betriebssystemdefinition) ?
Wenn ein Unix-System RAM als frei meldet , bedeutet dies "Ich benutze diesen RAM für nichts".
Freier RAM ist praktisch wertlos - Es beschleunigt Ihr System nicht, es sitzt nur da und ist "frei", falls etwas benötigt wird. Das könnte eines der drei anderen Dinge sein, die ich oben erwähnt habe.
Was sind Cache- und Pufferspeicher?
Cache und Pufferspeicher sind RAM, die das Betriebssystem verwendet, um Ihr System schneller zu machen.
Dieser Speicher wird derzeit nicht zum Ausführen von Programmen benötigt , daher verwendet Ihr Betriebssystem ihn, um häufig benötigte Daten zu speichern. Beispielsweise wird die C-Bibliothek (die von so gut wie jedem ausgeführten Programm benötigt wird) fast immer im cache
Speicher gespeichert Das System muss nicht zur Festplatte gehen, um die Anweisungen zum Drucken von "Hello World" auf dem Bildschirm zu finden.
Eigentlich ist es viel komplizierter - es gibt Shared Memory, Wired Memory usw. - aber für unsere Zwecke ist diese einfache Erklärung ausreichend.
Was ist aktiver Speicher?
Aktiver Speicher ist Teil von "verwendetem" Speicher - RAM, das von Anwendungen verwendet wird - Sortieren von Arbeitsblättern, Bereitstellen von Webseiten, Bearbeiten von Grafiken usw.
Aktiver Speicher war in letzter Zeit "aktiv". - das Programm behauptet, es habe seinen Inhalt verwendet (Lesen oder Schreiben), und es wird nicht als guter Kandidat für das Auswechseln angesehen.
Was ist inaktiver Speicher?
Wie der aktive Speicher ist der inaktive Speicher der Arbeitsspeicher, den die Anwendungen für ihre Zwecke verwenden. Der Unterschied besteht darin, dass auf diesen Speicher seit einiger Zeit nicht mehr zugegriffen wurde. Wenn also Push kommt, denkt das Betriebssystem, dass er auf die Festplatte ausgelagert werden kann, und (mit etwas Glück) das Programm, das behauptet, dass es nicht mehr danach fragt werde es nie bemerken.
Was ist "Verwendeter" Speicher (die MENSCHLICHE Definition)
Was Sie und ich als "belegten" Speicher betrachten, ist im Wesentlichen die Summe aus aktivem und inaktivem Speicher. Der gesamte RAM, der derzeit von Anwendungen für ihre Verwendung beansprucht wird.
Solange Sie mehr Arbeitsspeicher installiert haben als die Summe aus aktivem und inaktivem Arbeitsspeicher (plus einem Sicherheitsspielraum von 512-1024 MB), sind Sie in Ordnung: Ihr Betriebssystem wird wahrscheinlich die Swap- und Kill-Leistung nicht beeinträchtigen .
Was ist "freier" Speicher (die MENSCHLICHE Definition) ?
Was Sie und ich als "freien" Speicher betrachten, ist der Speicher, der zum Ausführen von Programmen zur Verfügung steht.
Dies ist etwas komplizierter als nur die Zahl "Kostenlos", die Ihr Betriebssystem ausgibt. Wenn ein Programm nach RAM fragt, versucht das Betriebssystem, den RAM so störungsfrei wie möglich abzurufen:
- Wenn freier Speicherplatz zur Verfügung steht (der herumsteht und nichts tut), wird dieser RAM zugewiesen.
- Wenn kein freier Speicher verfügbar ist, kann das Betriebssystem den Cache- und Pufferbereich ausschlachten: Das Material, auf das zuletzt / am seltensten zugegriffen wurde, im Pufferpool wird verworfen und der Arbeitsspeicher an das Programm übergeben.
- Wenn es keinen Buffer / Cache-RAM zum Ausschlachten gibt, prüft der Swapper den inaktiven Speicher und wählt die Regionen aus, auf die er am wenigsten zugreifen kann. Diese Daten werden ausgelagert, um sie auszutauschen (Festplatte), und der neu freigegebene RAM wird an das Programm übergeben.
- Wenn der gesamte inaktive Arbeitsspeicher ausgelagert wurde, beginnt der Swapper, den aktiven Arbeitsspeicher auf die Festplatte zu stellen.
(Dies ist ungefähr der Punkt, an dem die Leistung normalerweise den Hunden zukommt: Jedes Mal, wenn ein Programm die CPU einschaltet, müssen die ausgelagerten Bits in den RAM zurückgebracht werden, was bedeutet , dass der aktive Speicher eines anderen Programms ausgelagert werden muss - der hoher Swap-Umsatz wird als Thrashing bezeichnet )
- Wenn das System alles ausgelagert hat (und die Swap-Partition gefüllt hat) oder wenn Sie ein System ohne Swap-Partition betreiben , passieren schlimme Dinge . Zu diesem Zeitpunkt wird eines von zwei Dingen eintreten:
malloc()
wird versagen. Dies ist das POSIX-konforme Verhalten. Das Betriebssystem teilt dem nach RAM fragenden Programm mit, dass die Anforderung nicht erfüllt werden kann.
Das Programm kann entweder nach weniger RAM fragen oder wenn es mit einem kleineren Speicherblock nicht auskommt, kann es aufräumen und beenden. (Wenn das Programm schlecht geschrieben ist, stürzt es einfach ab.)
- Wenn Sie auf einer Linux-Box arbeiten, kann es sein , dass der OOM-Killer einen Drive-by-Mord begeht und andere Prozesse beendet, um genügend RAM freizugeben , um die Anforderung zu erfüllen.
Falls Sie anhand meiner Beschreibung hier und meiner Antwort auf die verknüpfte Frage nicht sagen können, halte ich dies für einen schrecklichen Weg, um das Problem zu lösen.
Warum steigt der freie Arbeitsspeicher beim Löschen von Dateien an?
In dem Beispiel aus der Frage hier haben Sie bemerkt, dass es möglich ist, RAM durch Löschen der Sicherungsdatei "freizugeben" - die Erklärung dafür ist ziemlich einfach: Da diese Datei von niemandem verwendet wird (keine offenen Datei-Handles) und von wo aus nicht mehr zugegriffen werden kann das Dateisystem (nicht verbunden) Das Betriebssystem weiß, dass niemand jemals wieder auf diese Daten zugreifen wird, und löscht die Daten aus dem Dateisystem-Cache.
Dadurch meldet das Betriebssystem mehr freien Speicher, hat jedoch keine Auswirkungen auf die Systemleistung.