Warum summiert sich die Speichernutzung in "top" nicht auf?

28

Ich habe festgestellt, dass manchmal, wenn ich oben ausgeführt werde , die Speichernutzung jedes Prozesses in der Prozesstabelle nicht zur Gesamtsumme zu addieren scheint.

Beispiel: In der folgenden Abbildung oben wird angegeben, dass 16 GB Arbeitsspeicher verwendet werden. Die Prozesstabelle zeigt jedoch nur zwei Prozesse mit etwas mehr als 520 MB. Wie kann ich herausfinden, was die anderen 15,5 Gb verbraucht? (Ich benutze CentOS.)

$ top

top - 12:16:34 up 45 Tage, 2:28, 3 Benutzer, Lastdurchschnitt: 0,24, 0,65, 0,71
Aufgaben: 274 gesamt, 1 laufend, 273 schlafend, 0 gestoppt, 0 Zombie
CPU (s): 2,3% us, 0,2% sy, 0,0% ni, 97,5% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Mem: 16432032k gesamt, 16340144k verwendet, 91888k frei, 21736k Puffer
Swap: 18481144k insgesamt, 1112k verwendet, 18480032k frei, 15624488k zwischengespeichert

  PID BENUTZER PR NI VIRT RES SHR S% CPU% MEM ZEIT + BEFEHL
18159 jsmith 15 0 260m 31m 4560 S 16.6 0.2 53: 35.64 Python
 4795 26 15 0 260 m 6608 4220 S 2.0 0.0 0: 00.06 Postmaster
    1 root 15 0 10344 680 568 S 0.0 0.0 0: 39.36 init
    2 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 00.53 Migration / 0
    3 root 34 19 0 0 0 S 0.0 0.0 0: 00.62 ksoftirqd / 0
    4 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 0
    5 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 02.09 Migration / 1
    6 root 34 19 0 0 0 S 0.0 0.0 0: 01.32 ksoftirqd / 1
    7 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 1
    8 root RT -5 0 0 0 S 0.0 0.0 0: 00.99 migration / 2
    9 root 34 19 0 0 0 S 0.0 0.0 0: 01.74 ksoftirqd / 2
   10 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 2
   11 root RT -5 0 0 0 S 0.0 0.0 0: 02.16 migration / 3
   12 root 34 19 0 0 0 S 0.0 0.0 0: 01.30 ksoftirqd / 3
   13 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 3
   14 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 01.94 Migration / 4
   15 root 34 19 0 0 0 S 0.0 0.0 0: 01.78 ksoftirqd / 4
   16 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 4
   17 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 01.92 Migration / 5
   18 root 34 19 0 0 0 S 0.0 0.0 0: 01.30 ksoftirqd / 5
   19 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 5
   20 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 02.06 Migration / 6
   21 root 34 19 0 0 0 S 0.0 0.0 0: 01.83 ksoftirqd / 6
   22 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 6
   23 Wurzel RT -5 0 0 0 S 0.0 0.0 0: 02.31 Migration / 7
   24 root 34 19 0 0 0 S 0.0 0.0 0: 01.50 ksoftirqd / 7
   25 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 watchdog / 7
   26 root 10 -5 0 0 0 S 0.0 0.0 0: 00.42 events / 0
   27 root 10 -5 0 0 0 S 0.0 0.0 0: 00.28 events / 1
   28 root 10 -5 0 0 0 S 0.0 0.0 0: 00.37 events / 2
   29 root 10 -5 0 0 0 S 0.0 0.0 0: 00.21 events / 3
   30 root 10 -5 0 0 0 S 0.0 0.0 0: 00.38 events / 4
   31 root 10 -5 0 0 0 S 0.0 0.0 0: 00.27 events / 5
   32 root 10 -5 0 0 0 S 0.0 0.0 0: 00.52 events / 6
   33 root 10 -5 0 0 0 S 0.0 0.0 0: 00.64 events / 7
   34 root 10 -5 0 0 0 S 0.0 0.0 0: 00.00 khelper
del
quelle

Antworten:

26

Aus den mit der Speichernutzung verbundenen Zeilen oben:

Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached

Lassen Sie uns den Tausch ignorieren. Gesamtspeicher entspricht der Summe aus verwendetem und freiem Speicher. Verwendet wird dagegen die Summe aus "von Anwendungen wirklich verwendet" und zwischengespeichert und gepuffert. Also, in deinem Fall geht das so:

  • Mem = 16432032k = 16340144k + 91888k;
  • "Wirklich von Anwendungen verwendet" = Verwendet - (zwischengespeichert + Puffer) = 16340144k - (15624488k + 21736k) = 693920k.

Die anderen 15,5 GB werden zwischengespeichert. Dies verbessert die Leistung. In dem Moment, in dem eine Anwendung einen Teil des zwischengespeicherten Speichers benötigt, wird dieser sofort übergeben. Sie werden dies bemerken, wenn Sie eine speicherhungrige Anwendung und einen Monitor ausführen top.

grs
quelle
1

Diese Liste sieht 274 totalfür mich nicht nach Prozessen aus. Oben wird normalerweise nur angezeigt, was auf Ihr Terminal / Bildschirm passt. Verwenden Sie ps auxstattdessen und addieren Sie den rssWert (oder die in Ihrer Version angezeigte Spalte für den residenten Speicher).

Sie möchten auch nicht die Größe des virtuellen Speichers addieren, da Sie anscheinend tatsächlich an der RESSpalte resident ( ) interessiert sind .

Daniel Beck
quelle