Frage Warum berichtet Linux seltsamerweise von "freiem" Speicher?


Das ist ein kanonische Frage darüber, wie Unix-Betriebssysteme die Speichernutzung melden.
  Ähnliche Fragen:

Ich habe einen Produktionsserver, der ausgeführt wird Debian 6.0.6 Squeeze

#uname -a

Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux

Jeden Tag Cron führt das Backup-Skript als root aus:

#contab -e

0 5 * * * /root/sites_backup.sh > /dev/null 2>&1

#nano /root/sites_backup.sh

#!/bin/bash
str=`date +%Y-%m-%d-%H-%M-%S`
tar pzcf /home/backups/sites/mysite-$str.tar.gz /var/sites/mysite/public_html/www
mysqldump -u mysite -pmypass mysite | gzip -9 > /home/backups/sites/mysite-$str.sql.gz
cd /home/backups/sites/
sha512sum mysite-$str* > /home/backups/sites/mysite-$str.tar.gz.DIGESTS
cd ~

Alles funktioniert perfekt, aber ich merke das Munins Speichergraph zeigt Zunahme von Zwischenspeicher und Puffer nach der Sicherung.

Dann lade ich einfach Backup-Dateien herunter und lösche sie. Nach der Löschung Munins Speichergraph kehrt zurück Zwischenspeicher und Puffer in den Zustand, der vor der Sicherung war.

Hier ist Munin Grafik:

Extern gehostetes Bild war eine tote Verbindung.


44
2017-11-16 04:29


Ursprung


Herzlichen Glückwunsch, diese Frage wurde kanonisiert (es ist wie die sechste Frage, die heute danach fragt, und sie hat zufällig das interessanteste und schönste Beispiel :-) - voretaq7
Sehen LinuxAteMyRam.com - Christoffer Hammarström


Antworten:


Dies ist das gleiche "Problem" wie von Server verweigert die Verwendung der Swap-Partition und ein paar andere ähnliche Fragen auf dieser Seite. ( Hohe Speicherauslastung auf Linux Server, Speichernutzung in LINUX, Webserver, der zu wenig Arbeitsspeicher aufweist, usw.)

Achten Sie darauf, dass der Speicherverbrauch von ist Zwischenspeicher. Dies bedeutet, dass eine Datei gespeichert wird. Cache-Speicher ist "freier" Speicher. Anstatt den Speicherblock leer zu lassen, speichert Ihr Betriebssystem kürzlich gelesene Dateien in diesem Speicherbereich. Wenn eine Anwendung diesen Speicher benötigt, wird sie von der Anwendung verwendet. Bis dahin besteht die Chance, dass Sie Ihre Datei nicht mehr von der Festplatte lesen müssen, wenn sie häufig referenziert wird.

Gemäß diesem Diagramm hat sich Ihr effektiver Speicherverbrauch während der gesamten Dauer des Diagramms nicht verändert.


27
2017-11-16 04:47



Ist es möglich, den Server anzuweisen, diese Dateien nicht zwischenzuspeichern? Ich denke ich sollte rennen sync; echo 3 > /proc/sys/vm/drop_caches nach dem Backup?
@ stan31337 Ja, es ist möglich, nein du sollte nicht TU das. Wenn Sie diese Datei im Speicher haben, kostet das nichts. Wenn Sie alle Ihre Caches löschen, wird jede Datei, die zwischengespeichert wird und erneut von der Festplatte gelesen werden muss, Ihr System nur verlangsamen. Lass es tun, wozu es entwickelt wurde. - Jeff Ferland
@ stan31337 Wenn Sie Ihre Backup-Datei löschen, wird sie vom Betriebssystem automatisch aus dem Cache entfernt (deshalb springt Ihr freier Speicher nach dem Löschen wieder hoch) - Linux ist schlau genug, um zu wissen, dass eine Datei nicht geöffnet ist und nicht kann aus der Dateisystemstruktur erreicht werden, wird nie wieder zugegriffen. Wie Jeff sagte, du willst auf keinen Fall deinen gesamten FS-Cache löschen (das System muss diese Daten nur noch einmal lesen und erneut zwischenspeichern, was deinen Server für eine Weile langsamer macht) - voretaq7


Du erlebst das Linux aß meinen Widder Problem.

Keine Panik.

Das ist kein Problem.

Ihr System funktioniert wie geplant.

Das Problem ist nicht Ihr Betriebssystem - das Problem ist Ihr Verständnis davon, was "freie" Speicher ist.


Unix-Systeme verwenden Speicher für mehr als nur das Ausführen von Programmen. Speicher könnte verwendet werden für:

  • Laufende Programme (aktiv / gebraucht)
  • Puffern von Daten während der Übertragung (Puffer)
  • Zwischenspeichern von Daten, die kürzlich von der Festplatte gelesen / auf die Festplatte geschrieben wurden (Cache)
  • Absolut nichts (kostenlos)

Was folgt, ist eine kurze (und größtenteils unvollständige) Tour, wie moderne Unix-Systeme die RAM-Nutzung melden.

Was ist freie Erinnerung? (die OS-Definition)?

Wenn ein Unix-System RAM als meldet Kostenlos es bedeutet "Ich benutze diesen RAM für nichts".
Kostenlos RAM ist effektiv wertlos - Es macht Ihr System nicht schneller, es sitzt nur da und ist "frei" für den Fall, dass es etwas braucht. Das könnte etwas von den drei anderen Dingen sein, die ich oben erwähnt habe.

Was sind Cache- und Pufferspeicher?

Cache und Pufferspeicher sind RAM, das das Betriebssystem verwendet, um Ihr System schneller zu machen.
Diese Erinnerung ist Wird momentan nicht benötigt, um Programme zu starten, so dass Ihr Betriebssystem es verwendet, um Daten zu speichern, die es häufig benötigt - zum Beispiel wird die C-Bibliothek (die von so ziemlich jedem ausgeführten Programm benötigt wird) fast immer gespeichert cacheSpeicher, so dass das System nicht auf die Festplatte gehen muss, um die Anweisungen zu finden, die es benötigt, um "Hello World" auf dem Bildschirm zu drucken.
Es ist tatsächlich viel komplizierter als das - da ist geteilt Erinnerung, verdrahtet Gedächtnis usw. - aber für unsere Zwecke ist diese einfache Erklärung ausreichend.

Was ist aktiver Speicher?

Aktiver Speicher ist Teil von "gebrauchtem" Speicher - RAM, den Anwendungen für das verwenden, was sie auch tun - Tabellen sortieren, Webseiten bedienen, Grafiken bearbeiten usw.
"Aktiver" Speicher war in letzter Zeit "aktiv" - das Programm behauptet, es habe seinen Inhalt genutzt (Lesen oder Schreiben), und es wird nicht als ein guter Kandidat zum Austauschen angesehen.

Was ist ein inaktiver Speicher?

Wie aktiver Speicher ist Inaktiver Speicher RAM, den Anwendungen für das verwenden, was sie auch tun. Der Unterschied besteht darin, dass auf diesen Speicher seit einiger Zeit nicht mehr zugegriffen wurde. Wenn also der Druck nachlässt, denkt das Betriebssystem, dass es auf die Festplatte ausgelagert werden kann und (mit etwas Glück) das Programm behauptet, es werde es nicht erneut anfordern werde es nie bemerken.

Was ist "Benutzt" Speicher (die MENSCHLICHE Definition)

Was Sie und ich als "benutzten" Speicher betrachten, ist im Wesentlichen die Summe von aktivem und inaktivem Speicher. Alle derzeit von Anwendungen beanspruchten Arbeitsspeicher.
Solange Sie mehr Arbeitsspeicher als die Summe von aktivem und inaktivem Arbeitsspeicher (zuzüglich einer netten Sicherheitsmarge von zB 512-1024 MB) haben, sind Sie an einem guten Ort: Ihr Betriebssystem wahrscheinlich wird nicht Swap- und Tötungsleistung treffen.

Was ist "freie" Erinnerung (die MENSCHLICHE Definition)?

Was Sie und ich als "freien" Speicher ansehen, ist der Speicher, der zum Ausführen von Programmen zur Verfügung steht.
Dies ist etwas komplizierter als nur die "Free" -Figur, die Ihr Betriebssystem meldet. Wenn ein Programm nach RAM fragt, versucht das Betriebssystem, dieses RAM so wenig wie möglich zu stören:

  • Wenn freier Speicher zur Verfügung steht (um nichts zu tun), wird RAM zugewiesen.
  • Wenn kein freier Speicher verfügbar ist, kann das OS den Cache- und Buffer-Platz ausnutzen: Die am wenigsten zuletzt / am wenigsten häufig aufgerufenen Sachen im Puffer-Pool werden verworfen, und dieser RAM wird dem Programm gegeben.
  • Wenn kein Puffer- / Cache-RAM vorhanden ist, kann der Swapper den inaktiven Speicher untersuchen und die Regionen auswählen, von denen er glaubt, dass sie am wenigsten darauf zugreifen. Diese Daten werden sein ausgelagert zu tauschen (Platte), und der neu freigegebene RAM an das Programm gegeben.
  • Wenn der gesamte inaktive RAM ausgelagert wurde, beginnt der Swapper damit, Active RAM auf den Datenträger zu setzen.
    (Hier geht es normalerweise darum, dass die Leistung normalerweise den Hunden zukommt: Jedes Mal, wenn ein Programm die CPU einschaltet, müssen seine ausgelagerten Bits wieder in den RAM gebracht werden, was bedeutet Der aktive Speicher eines anderen Programms muss ausgelagert werden - Der hohe Umsatz im Tausch wird genannt Prügel)
  • Wenn das System alles ausgelagert hat (und die Swap-Partition gefüllt hat) oder wenn Sie ein System betreiben ohne eine Swap-Partition, Schlechte Dinge geschehen. An diesem Punkt wird eines von zwei Dingen auftreten:
    • malloc() wird versagen. Dies ist das POSIX-konforme Verhalten - das Betriebssystem teilt dem Programm mit, dass nach RAM gefragt wird, dass es die Anforderung nicht erfüllen kann.
      Das Programm kann entweder nach weniger RAM fragen, oder wenn es mit einem kleineren Speicherstück nicht fertig werden kann, kann es aufräumen und aussteigen. (Wenn das Programm schlecht geschrieben ist, stürzt es einfach ab.)
    • Wenn Sie auf einer Linux-Box sind, die OOM-Killer kann auf eine Gang-Art Drive-by-Amoklauf gehen, andere Prozesse beenden, um zu versuchen, genug RAM freizusetzen, um die Anfrage zu erfüllen.
      Wenn Sie nicht durch meine Beschreibung hier und meine Antwort auf die verknüpfte Frage feststellen können, denke ich, dass dies ein schrecklicher Weg ist, mit dem Problem umzugehen.

Warum geht beim Löschen von Dateien der freie RAM-Speicher nach oben?

Im Beispiel aus der Frage haben Sie festgestellt, dass es möglich ist, RAM durch Löschen der Backup-Datei zu "befreien" - die Erklärung dafür ist ziemlich einfach: Da nichts diese Datei verwendet (keine offenen Datei-Handles) und es nicht mehr vom Dateisystem aus zugänglich ist (nicht verknüpft), weiß das Betriebssystem, dass niemand jemals wieder auf diese Daten zugreifen wird, und es löscht die Daten aus dem Dateisystem-Cache.
Dadurch meldet das Betriebssystem mehr freien Speicher, hat jedoch keinen Einfluss auf die Systemleistung.


61
2017-11-16 05:10



Jetzt ist es vollkommen klar für mich ... Meine Linux Erfahrung ist ungefähr 2 Monate, alles begann mit diesem Debian Server. Vor einem Monat habe ich Gentoo auf meinem Home-Laptop installiert und war so erstaunt über die Leistung, die sich von Windows-Benutzer zu Linux-Benutzer sogar auf meinem Arbeitscomputer völlig geändert hat. Es ist großartig, Linux mit Gentoo zu lernen, und trotzdem gibt es verdammt viel zu lernen.
@ stan31337 Sie sind nicht die einzige, für die es unklar ist - es ist besonders schwierig für Leute, die aus einem Windows-Hintergrund kommen, denn wenn Sie nicht drüber bohren, meldet Windows Speicherverbrauch nicht mit dieser Detailgenauigkeit - es ist nur "Used" (von Programmen ) und "Free" (für Programme). Mac-Nutzer haben es a wenig einfacher, weil Activity Monitor im Grunde eine grafische Version von top und meldet Free / Wired / Active / Inactive RAM. - voretaq7
Ich habe früher damit gearbeitet Process Explorer Unter Windows hatte es eine Menge Memory-Sachen zu zeigen, aber die meisten waren mir so unklar, dass ich sie nicht wirklich ansah ...
Es sollte auch angemerkt werden, dass Windows normalerweise nicht Zeig es in so viel Detail hat es eine sehr ähnliche Einrichtung. - Joachim Sauer
Sie wissen, sogar in Windows ist die Speicheranzeige verwirrend. Dies ist etwas, auf das OS-Hersteller mehr Wert legen sollten, oder eher etwas, das Benutzer weniger interessieren sollten als sie es derzeit tun. - gparent


Etwas anderes, um zu überprüfen, ob das obige fehlschlägt:

Überprüfen Sie die Verwendung des Slab-Caches (Slab:, SReclaimable: und    SUnreclaim: im /proc/meminfo). Dies ist ein Cache für In-Kernel-Daten   Strukturen, und ist getrennt von dem Seitencache gemeldet von free.

Wenn der Plattencache für einen großen Teil Ihrer "fehlenden   Speicher ", überprüfen /proc/slabinfo um zu sehen, wo es hin ist. Wenn es   Dentries oder Inodes, die Sie verwenden können sync ; echo 2 > /proc/sys/vm/drop_caches Sie loswerden.

Sie können auch die slabtop Werkzeug, um die aktuelle Nutzung des zu zeigen   Slab Cache in einem freundlichen Format. c Sortiert die Liste nach dem aktuellen Stand   Cache-Größe

Von: https://stackoverflow.com/a/5467207


2
2018-02-21 15:57