Meine Antwort von Serverfault neulich schamlos kopieren/einfügen :-)
Das virtuelle Speichersystem von Linux ist nicht ganz so einfach. Sie können nicht einfach alle RSS-Felder addieren und den gemeldeten Wert used
erhalten bis free
. Dafür gibt es viele Gründe, aber ich werde ein paar der wichtigsten hervorheben.
-
Wenn sich ein Prozess verzweigt, werden sowohl der übergeordnete als auch der untergeordnete Prozess mit demselben RSS angezeigt. Linux verwendet jedoch Copy-on-Write, sodass beide Prozesse wirklich denselben Speicher verwenden. Nur wenn einer der Prozesse den Speicher verändert, wird er tatsächlich dupliziert.
Dies wird denfree
verursachen kleiner sein alstop
RSS-Summe. -
Der RSS-Wert enthält keinen gemeinsam genutzten Speicher. Da Shared Memory keinem Prozess gehört,
top
nimmt es nicht in RSS auf.
Dies wird denfree
verursachen größer alstop
sein RSS-Summe.
Wenn Sie nach Gedächtniszahlen suchen, die sich summieren, schauen Sie sich smem an:
smem ist ein Tool, das zahlreiche Berichte über die Speichernutzung auf Linux-Systemen liefern kann. Im Gegensatz zu bestehenden Tools kann smem die proportionale Satzgröße (PSS) melden, was eine aussagekräftigere Darstellung der Speichermenge ist, die von Bibliotheken und Anwendungen in einem virtuellen Speichersystem verwendet wird.
Da große Teile des physischen Speichers normalerweise von mehreren Anwendungen gemeinsam genutzt werden, überschätzt das Standardmaß der Speichernutzung, das als Resident Set Size (RSS) bekannt ist, die Speichernutzung erheblich. PSS misst stattdessen den "fairen Anteil" jeder Anwendung an jedem gemeinsam genutzten Bereich, um ein realistisches Maß zu erhalten.
Zum Beispiel hier:
# smem -t
PID User Command Swap USS PSS RSS
...
10593 root /usr/lib/chromium-browser/c 0 22868 26439 49364
11500 root /usr/lib/chromium-browser/c 0 22612 26486 49732
10474 browser /usr/lib/chromium-browser/c 0 39232 43806 61560
7777 user /usr/lib/thunderbird/thunde 0 89652 91118 102756
-------------------------------------------------------------------------------
118 4 40364 594228 653873 1153092
Also PSS
ist die interessante Spalte hier, weil sie Shared Memory berücksichtigt.
Im Gegensatz zu RSS
es ist sinnvoll, es zu addieren. Wir erhalten hier insgesamt 654 MB für Userland-Prozesse.
Über den Rest informiert die systemweite Ausgabe:
# smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 345784 297092 48692
userspace memory 654056 181076 472980
free memory 15828 15828 0
----------------------------------------------------------
1015668 493996 521672
Also 1 GB RAM insgesamt =654 MB Userland-Prozesse + 346 MB Kernelspeicher + 16 MB kostenlos
(geben oder nehmen Sie ein paar MB)
Insgesamt wird etwa die Hälfte des Speichers für den Cache verwendet (494 MB).
Bonusfrage :Was ist hier Userland-Cache vs. Kernel-Cache?
btw für etwas visuelles versuchen:
# smem --pie=name
Ein wirklich gutes Werkzeug ist pmap
die die aktuelle Speichernutzung für einen bestimmten Prozess auflisten:
pmap -d PID
Weitere Informationen dazu finden Sie auf der Manpage man pmap
und werfen Sie auch einen Blick auf 20 Linux-Systemüberwachungstools, die jeder Systemadministrator kennen sollte, die großartige Tools auflisten, die ich immer verwende, um Informationen über meine Linux-Box zu erhalten.