it-swarm.com.de

Linux free weist eine hohe Speichernutzung auf, top jedoch nicht

Unter RedHat Linux 6.2 starte ich free -m und es zeigt fast alle 8GB gebraucht

             total       used       free     shared    buffers     cached
Mem:          7989       7734        254          0         28       7128
-/+ buffers/cache:        578       7411
Swap:         4150          0       4150

Aber zur gleichen Zeit in top -M Ich kann keine Prozesse sehen, die all diesen Speicher belegen:

top - 16:03:34 up  4:10,  2 users,  load average: 0.08, 0.04, 0.01
Tasks: 169 total,   1 running, 163 sleeping,   5 stopped,   0 zombie
Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 98.6%id,  0.4%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  7989.539M total, 7721.570M used,  267.969M free,   28.633M buffers
Swap: 4150.992M total,    0.000k used, 4150.992M free, 7115.312M cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1863 sroot     20   0  398m  24m 9.8m S  0.3  0.3   3:12.87 App1
    1 sroot     20   0  2864 1392 1180 S  0.0  0.0   0:00.91 init
    2 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.07 migration/0
    4 sroot     20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.08 migration/1
    8 sroot     RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1

Ich habe es auch versucht ps mem script aber es zeigt nur, dass ungefähr 400 MB Speicher verwendet werden.

57
DarVar

Schauen Sie nicht auf die Zeile "Mem", sondern auf die darunterliegende.

Der Linux-Kernel verbraucht so viel Speicher wie möglich, um den E/A-Cache bereitzustellen (und andere nicht kritische Puffer, aber der Cache wird den größten Teil dieser Nutzung ausmachen). Dieser Speicher wird an Prozesse weitergegeben, wenn diese ihn anfordern. In der Zeile "-/+ Buffer/Cache" werden die angepassten Werte angezeigt, nachdem der E/A-Cache berücksichtigt wurde, d. H. Die von Prozessen belegte Speichermenge und die für Prozesse verfügbare Speichermenge (in diesem Fall 578 MB verwendet und 7411MB frei).

Die Differenz des belegten Speichers zwischen der Zeile "Mem" und "-/+ Buffer/Cache" zeigt an, wie viel vom Kernel für die Zwischenspeicherung verwendet wird: 7734 MB - 578 MB = 7156 MB im E/A-Cache. Wenn Prozesse diesen Speicher benötigen, verkleinert der Kernel einfach den E/A-Cache.

111
cdhowie

Auch, wie die erste Zeile zeigt total used free shared buffers cached Mem: 7989 7734 254 0 28 7128 -/+ buffers/cache: 578 7411

Wenn wir (zwischengespeicherte [7128] + Puffer [28] + freie [254]) hinzufügen, erhalten wir ungefähr den freien [7411] Wert der zweiten Zeile 7128 + 28 + 254 = 7410

14
Gnana

Wenn der Cache klein ist, versuchen Sie diesen Befehl:

ps aux --sort -rss
0
李效伦