Die folgenden drei Ausgaben wurden im Wesentlichen gleichzeitig vorgenommen:
oben:
top - 02:54:36 up 2 days, 13:50, 3 users, load average: 0.05, 0.05, 0.09
Tasks: 181 total, 1 running, 179 sleeping, 0 stopped, 1 zombie
%Cpu(s): 2.5 us, 0.8 sy, 0.0 ni, 96.6 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 16158632 total, 11234480 used, 4924152 free, 844 buffers
KiB Swap: 16777212 total, 0 used, 16777212 free, 10640832 cached
frei -h:
total used free shared buffers cached
Mem: 15G 10G 4.7G 0B 844K 10G
-/+ buffers/cache: 578M 14G
Swap: 15G 0B 15G
htop:
frei und top scheinen zuzustimmen. Oben werden 11234480 KiB verwendet. Wenn 10640832 KiB zwischengespeichert werden, erhalten Sie 579,7 MiB, was ziemlich nahe an den kostenlosen Berichten unter den verwendeten +/- Puffern / Cache liegt.
Allerdings meldet htop 1836 (MiB) verwendet, was meines Erachtens weder hier noch dort ist. Woher kommt dieser Unterschied? htop enthält die zwischengespeicherten Daten eindeutig nicht, meldet jedoch immer noch mehr als das Dreifache der Speichernutzung von free oder top.
Ich bin mir bewusst, dass es viele ähnliche Fragen gibt, aber ich bin nicht auf eine gestoßen, die diese Diskrepanz erklärt (die Verwirrung scheint normalerweise nur die mit / ohne Cache-Zählung zu sein).
Bearbeiten: Ich sollte erwähnen, dass ich openSUSE ausführe und in Version 12.2 und 12.3 RC1 die gleiche Diskrepanz sehe.
Edit2: Die enthaltene Version von htop ist 1.0.1. Ich habe auch Version 1.0.2 aus dem Quellcode kompiliert und sehe dann auch die gleiche Diskrepanz.
Antworten:
Eine vollständige Überarbeitung meines vorherigen Beitrags. Ich wurde ein bisschen neugierig und checkte weiter aus.
Kurz gesagt: Der Grund für den Unterschied ist, dass openSUSE eine gepatchte Version von top and free verwendet , die "zwischengespeichert" einige zusätzliche Werte hinzufügt .
A) Standardversion
top, kostenlos, htop , ...:
Die Nutzung wird berechnet, indem Daten gelesen werden aus
/proc/meminfo
:Z.B:
* Ich verwende den Namen
Used U
für den vom Benutzermodus verwendeten Speicher. Aka Verwendet Minus (zwischengespeichert + Puffer) .In Wirklichkeit wird also dieselbe Berechnung verwendet.
htop
Zeigen Sie Folgendes in der Speichermessung an:(MB ist eigentlich MiB.)
B) Gepatchte Version
Die Basis für
free
undtop
auf Debian, Fedora, openSuse ist procps-ng . Jede Geschmacksrichtung fügt jedoch ihre eigenen Patches hinzu, die möglicherweise oder möglicherweise nicht Teil des Hauptprojekts werden.Unter openSUSE finden wir verschiedene Ergänzungen zum Paket top / free (procps). Hier sind einige zusätzliche Werte zu beachten, die zur Darstellung des Cache-Werts verwendet werden. (Ich habe diese nicht in meinen vorherigen Beitrag aufgenommen, da mein System ein "sauberes" Procps verwendet.)
B.1) Ergänzungen
In / proc / meminfo haben wir Slab , einen Kernel-Datenstruktur-Cache. Als Unterkategorie finden wir SReclaimable, das Teil von Slab ist und möglicherweise sowohl vom Kernel als auch vom Benutzermodus für andere Zwecke zurückgefordert wird.
Außerdem haben wir SwapCached , einen Speicher, der einmal ausgelagert wurde, eingetauscht wird, sich aber auch in der Auslagerungsdatei befindet. Wenn man es also wieder austauschen muss, ist dies bereits erledigt.
Schließlich gibt es NFS_Unstable , Seiten, die an den Server gesendet, aber noch nicht für einen stabilen Speicher festgelegt wurden.
Die folgenden Werte werden
cache
in der gepatchten openSUSE-Version hinzugefügt :(Zusätzlich gibt es einige Überprüfungen, dass die Summe größer als frei sein muss, verwendet größer sein muss als Puffer + Cache usw.)
B.2) Ergebnis
Wenn Sie frei betrachten , sind die folgenden Werte gleich :
total, used, free and buffers
.Folgendes wird geändert :
cached and "+/- buffers"
.Die gleichen Ergänzungen werden nach oben vorgenommen .
htop ist unverändert und stimmt daher nur mit älteren / oder nicht gepatchten Versionen von top / free überein.
quelle