Nach der Recherche immer noch verwirrt über die Überwachung der RAM-Nutzung

10

Ich habe diesen Artikel durchgearbeitet , in dem verschiedene Methoden zum Überprüfen der RAM-Nutzung erläutert werden. Ich kann die verschiedenen Methoden jedoch nicht miteinander in Einklang bringen und weiß nicht, welche richtig ist.

Wenn ich mich zum ersten Mal anmelde, werde ich mit einem Bildschirm wie dem folgenden begrüßt:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Dies deutet darauf hin, dass ich 41% meines Arbeitsspeichers verwende, was ziemlich hoch erscheint, da der Server nicht viel tut. Oder bezieht sich diese Zahl auf etwas anderes als RAM?

Als nächstes versuche ich die free -mMethode:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Laut der erläuternden Grafik im Artikel bedeutet dies, dass ich 130 MB verwendeten RAM und 459 MB freien RAM habe, was darauf hindeutet, dass ich ungefähr 22% meines RAM verwende.

Als nächstes renne ich top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Dies ist am verwirrendsten, da die Zusammenfassung zeigt, dass ich 525 mg von insgesamt 604 Mio. verwende. Wenn jedoch der interaktive Befehl "m" zum Sortieren nach dem obersten Speicher verwendet wird, verwendet der oberste Prozess nur 0,3% des Speichers.

Schließlich psscheint der Befehl auch sehr wenig Speicherplatz anzuzeigen:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Ich würde es lieben, wenn jemand meine Missverständnisse korrigiert, die diese offensichtlichen Konflikte verursachen.

Vielen Dank!

EDIT für Rahul

Ausgabe von cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Jona
quelle
# 1) , um den Befehl in oben nach Sortierung Speicher ist nicht m , es ist M . # 2) Um alle Prozesse zu sehen, versuchen Sie ** ps ax -o Befehl, rss **; Was du gelaufen bist, zeigt nur deine eigenen.
Tink
Bitte aktualisieren Sie uns auch Ausgabe voncat /proc/meminfo
Rahul Patil
5
linuxatemyram.com
Michael Hampton
@ Tink, danke für diese Erklärung. Ich habe es ps ax -o rss | awk '{ sum+=$1} END {print sum}'gerade versucht und 153156.
Jonah
@ RahulPatil, OP aktualisiert. Beachten Sie, dass die ausgeführten Prozesse möglicherweise geringfügig von den ursprünglichen Zahlen abweichen, aber nicht so weit entfernt sein sollten. Außerdem scheint das Ergebnis, das ich für Sie erhalten habe, nicht mit dem Ergebnis übereinzustimmen, das ich im obigen Kommentar für Tink erhalten habe. Diese wurden nur ein paar Minuten auseinander genommen.
Jonah

Antworten:

8

Sie müssen nur das Speicherkonzept verstehen

Gemäß Ihrer Ausgabe von / proc / meminfo müssen Sie nur die folgenden Dinge beachten:

Puffer : - Ein Puffer muss noch auf die Festplatte "geschrieben" werden. Es gibt an, wie viel RAM für den Cache-Plattenblock reserviert ist. "Cached" ähnelt "Buffers", nur dass diesmal Seiten beim Lesen von Dateien zwischengespeichert werden

Cached : - Ein Cache ist etwas, das „Lesen“ von der Platte wurde und für die spätere Verwendung gespeichert. Im Allgemeinen können Sie den Cache-Bereich als einen weiteren "freien" RAM betrachten, da dieser schrittweise verkleinert wird, wenn die Anwendung mehr Speicher benötigt.

Es reicht zu verstehen, dass sowohl "Puffer" als auch "zwischengespeichert" die Größe des Systemcaches darstellen. Sie wachsen oder schrumpfen dynamisch, wie vom internen Linux-Kernel-Mechanismus gefordert.

Beim Webhosting wird der Cache mit dem folgenden cmd gelöscht: (meistens in cron konfiguriert):

sync && echo 3 > /proc/sys/vm/drop_caches

Link zitieren

BEARBEITEN Sie für eine weitere Anforderung, dh pro Benutzerspeicherauslastung

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Bitte überprüfen Sie mit dem obigen Skript und lassen Sie mich wissen, ob es richtig angezeigt wird oder nicht.

Rahul Patil
quelle
Danke Rahul. Eine letzte Frage. free -mWas ist eine genaue Methode, um festzustellen, wie viel realer RAM von einem bestimmten Benutzer verbraucht wird, da dies keine Möglichkeit bietet, den pro Benutzer verwendeten Speicher anzuzeigen? Dies tritt beispielsweise auf, wenn Sie Ihre eigene Speichernutzung auf einem gemeinsam genutzten Server überwachen.
Jonah
@ Jonah Ich habe aktualisiert .. bitte überprüfen und lassen Sie es mich wissen
Rahul Patil
Das Skript funktioniert nicht wie erwartet. Aber ich versuche es bald zu aktualisieren
Rahul Patil
@ Jonah danke für die Annahme meiner ans .. aber wirklich danke für MichaelHampton ...
Rahul Patil
2

Gute Antwort @RahulPatil.

Ein weiterer zu berücksichtigender Punkt bei ps oder top ist folgender

Dieses Tool [exmap] ist genauer als ps oder top, da es gemeinsam genutzte Bibliotheken berücksichtigt, die von mehreren Anwendungen verwendet werden. Wenn beispielsweise zwei Anwendungen dieselbe gemeinsam genutzte Bibliothek verwenden, die 1 MB Speicher beansprucht, zeigt ps beide Apps mit 1 MB zusätzlichem Speicher an, während exmap jede App mit 500 KB korrekter anzeigt. Diese höhere Genauigkeit ist besonders wichtig für die Bewertung von Desktop-Umgebungen wie KDE und GNOME, in denen Bibliotheken, die von Anwendungen gemeinsam genutzt werden, sehr häufig verwendet werden.

Über ibm / developerworks / linux_memory

Da sich Ihre Frage auf einen Headless-Server bezieht, bin ich mir nicht sicher, wie viel Double Reporting Top oder Ps tatsächlich haben werden.

Yeow_Meng
quelle
0

Ich fürchte, wir übersehen möglicherweise das Offensichtliche, weil es für die meisten von uns "natürlich" ist.

Jonah, vergib mir, wenn ich falsch liege, aber deine Fragen klingen so, als hättest du vielleicht nicht bemerkt, dass all diese Werte, insbesondere die CPU-Auslastung, normalerweise von Sekunde zu Sekunde sehr unterschiedlich sind.

Die CPU-Auslastung kann sofort von einstelligen auf 100% steigen, wenn ein neuer Prozess gestartet wird, fällt jedoch schnell (hoffentlich) auf den Bereich unter 50% zurück.

Die Speichernutzung ändert sich langsamer, aber dort versucht Linux, nicht aktiv genutzten Speicher zu verwenden, indem Prozesse zum "Zwischenspeichern" von Festplattenzugriffen ausgeführt werden. Beispielsweise wird versucht, vorherzusagen, was als Nächstes von der Festplatte gelesen werden muss, z. B. der Rest einer großen Datei, nachdem ein Teil gelesen wurde, und ihn im Cache vorzuladen. Einige der Speicherauslastungswerte umfassen sowohl den von Prozessen verwendeten Speicher als auch den zum Zwischenspeichern verwendeten Speicher. Auf einem System, das eine Weile läuft, werden die beiden wahrscheinlich 80-90% oder mehr betragen.

Bedenken Sie auch, dass der Prozess, den Sie ausführen, um die Nutzung anzuzeigen, z. B. topauch CPU und Speicher verwendet. Wenn Sie ein Skript mit einer Schleife geschrieben haben, um die CPU-Auslastung kontinuierlich zu melden, wird mit ziemlicher Sicherheit immer 100% angezeigt, da beim Melden der Auslastung selbst (ohne sleep Verzögerungen) die gesamte CPU verwendet wird.

DocSalvager
quelle
Doc, danke für den Gedanken, aber das war nicht das Problem
Jonah