Wie kann ich die Speichernutzung überwachen?

265

Ich habe topim Moment die Speichernutzung gesehen. Ich möchte jedoch die Speichernutzung über einen bestimmten Zeitraum hinweg überwachen. Starten Sie z. B. die Überwachung und führen Sie dann einige Befehle aus. Beenden Sie dann die Überwachung und sehen Sie, wie viel Speicher während des Zeitraums verwendet wurde.

Wie kann ich das auf Ubuntu Server machen?

Ich schätze, ich könnte alle 5 Sekunden einen Cronjob starten und einen Befehl aufrufen, der die aktuelle Speichernutzung in einer Textdatei aufzeichnet. Aber welchen Befehl soll ich verwenden, um die aktuelle Speichernutzung in einem Format abzurufen, das sich leicht in eine Textdatei schreiben lässt?

Jonas
quelle

Antworten:

322

Ich empfehle die vorherigen Antworten zu kombinieren

watch -n 5 free -m

Beachten Sie, dass Linux gerne zusätzlichen Speicher zum Zwischenspeichern von Festplattenblöcken verwendet . Sie wollen sich also nicht nur das Freie ansehen Mem. Sie möchten die freeSpalte der -/+ buffers/cache:Zeile anzeigen. Dies zeigt, wie viel Speicher für Anwendungen verfügbar ist. Also bin ich einfach gelaufen free -mund habe folgendes bekommen:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

Ich weiß, dass ich 1528 MB benutze und 2170 MB frei habe.

Hinweis: Um diesen watchZyklus zu stoppen, drücken Sie einfach Ctrl+ C.

Justin Force
quelle
1
Danke, das ist informativ. Aber auf der verwendeten Spalte, die Sie zuerst 2896und dann 1528für Puffer haben, bedeutet dies nicht, dass Sie verwenden 2896 + 1528?
Jonas
8
Mem: usedist Ihr insgesamt verwendeter Speicher. -/+ buffers/cache: usedist der insgesamt genutzte Speicher abzüglich Puffer und Cache. Ich weiß, dass die Ausgabe lustig aussieht, aber hier ist keine Arithmetik erforderlich. Sie suchen nur nach used / free in der Zeile - / + Buffer / Cache.
Justin Force
6
Die Option -h ist viel
besser
1
@frmdstryr Guter Punkt! -h / - human existierte jedoch nicht, als ich das schrieb. gitlab.com/procps-ng/procps/commit/…
Justin Force
3
@ cbradsh1 Das kannst du einfach machen free -h, zB watch -n 5 free -hum eine "menschenlesbare" Ausgabe zu bekommen, zB 2.1Ganstatt 2170in der Ausgabe.
Justin Force
213

Ich denke, htopist die beste Lösung.

  • sudo apt-get install htop

Auf diese Weise werden Sie feststellen, welche Programme am meisten RAM verwenden. und Sie können einfach einen beenden, wenn Sie möchten. Hier ist ein Screenshot!

Alvar
quelle
2
htopist schön, weil es "grafischer" und möglicherweise leichter zu lesen ist als free.
Mjswensen
1
Ich verstehe die Ausgabe nicht. Wird RESder von dieser Anwendung verwendete Speicher in MB angegeben? Was ist dann SHR?
Faizal
1
@faizal: virtueller, reservierter und gemeinsam genutzter Speicher.
WitchCraft
1
Wie wird htopdie "Speichernutzung über einen bestimmten Zeitraum" angezeigt?
Engel
htop -s M_SHARE htop -s ZEIT
Tomachi
40

Wenn Sie nach einer netten Aufschlüsselung des von jedem ausgeführten Prozess verwendeten Speichers suchen, empfehle ich möglicherweise, ps_mem.py ( hier bei pixelbeat.org zu finden) zu überprüfen.

Ich weiß, dass Sie in den obigen Kommentaren erwähnt haben, dass Sie einen einzeiligen Schnappschuss von free wollen , aber ich dachte, andere könnten dies nützlich finden.

Beispielausgabe:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

Der einzige Teil, den ich nicht mag, ist die Tatsache, dass das Skript angibt, Root-Rechte zu benötigen. Ich hatte noch keine Gelegenheit, genau zu sehen, warum dies der Fall ist.

Jason Mock
quelle
Ich frage mich, ob Speicher zwischen Threads geteilt wird. Es wird zwischen Prozessen geteilt, nicht wahr? Zumindest unter Windows ...
Thomas Weller
In diesem Fall bezieht sich der gemeinsam genutzte Speicher auf Seiten, die von mehreren Prozessen in Form von gemeinsam genutzten Bibliotheken zugeordnet werden. Im Kontext einer Multithread-Anwendung können alle Threads in diesem Prozess auf den gesamten Prozessspeicher zugreifen.
Jason Mock
4
Jetzt in PyPI ( pip install ps_mem) und auf GitHub verfügbar .
Leif Arne Storset
@ThomasWeller: Ja, Threads teilen sich immer den Speicher, während Prozesse unter bestimmten Umständen einen Teil oder den gesamten Speicher teilen.
Leif Arne Storset
dafür benutze ich gnome-system-monitor
24

Verwenden Sie den Befehl free . Dies ist zum Beispiel die Ausgabe von free -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ gibt nur die zweite Zeile zurück:

-/+ buffers/cache:        947       1064
Jesaja
quelle
Danke, sieht gut aus. Das 947ist also die Speichernutzung abzüglich des für Puffer und Caches verwendeten Speichers?
Jonas
11

Der Befehl watch kann nützlich sein. Versuchen Sie watch -n 5 free, die Speichernutzung alle fünf Sekunden durch Aktualisierungen zu überwachen.

mgunes
quelle
Danke, das war großartig! Ich würde es jedoch vorziehen, die Speichernutzung in einer einzelnen Zeile abzurufen, damit es einfach ist, sich in eine Textdatei einzuloggen.
Jonas
8

Sie können es mit tun cat /proc/meminfo.

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB
Amir
quelle
1
Das Hinzufügen von watch zur Vorderseite dieses Befehls macht es fantastisch! wie inwatch cat /proc/meminfo
Elder Geek
Der freeBefehl entnimmt seine Informationen /proc/meminfound präsentiert sie kompakt. Verwendung free -hfür lesbare Ausgaben.
LoMaPh
4

Zur visuellen Überwachung der gesamten RAM-Auslastung wird bei Verwendung von Byobu die Speichernutzung in der unteren rechten Ecke des Terminals beibehalten und ausgeführt, während Sie sich in einer Terminalsitzung befinden.

Wie Sie auf dem Screenshot sehen können, hat meine virtuelle Maschine eine Betriebszeit von 1 Stunde und drei Minuten, eine Auslastung von 0,00, einen (virtuellen) 2,8-GHz-Prozessor und 994 MB (21%) des auf dem System verfügbaren Arbeitsspeichers.

Byobu im Einsatz

bafromca
quelle
3

Einzeilige Lösung und Ausgabe:

free -m | grep "Mem:"

Hier ist ein Beispiel für die erwartete Ausgabe:

Mem:           3944         652         302          18        2990        2930
Tim
quelle
1

Ich würde Kakteen benutzen . Dadurch wird die Speichernutzung usw. über einen bestimmten Zeitraum hinweg grafisch dargestellt, und Sie können die Nutzung mit Ihrem Webbrowser überprüfen.

Matt
quelle
1

Überwachen der Speichernutzung

Ich stimme eher mit einem der vorhergehenden Beiträge überein, in denen Cacti als eine großartige Möglichkeit zur Überwachung der Speichernutzung erwähnt wurde. Da es den Anschein hat, dass Kakteen im Mainstream nicht mehr beliebt sind, gibt es eine alternative Grafikanwendung namens Graphite.

Graphite ist relativ einfach auf einem Ubuntu-Server zu installieren. Um es zu installieren, können Sie diesen Link für die einfach zu befolgenden Installationsverfahren überprüfen .

Nach der Installation von Graphit können Sie nun Speichermetriken in einem von Ihnen gewünschten Intervall senden. alle 5 Sekunden, jede Minute, jede Stunde ... usw.

Wie bereits in früheren Beiträgen vorgeschlagen, können Sie zum Zeichnen von Speichermesswerten mithilfe von Systemtools ein eigenes Skript schreiben, um die erforderlichen Speicherinformationen zu erfassen. Oder Sie können ein vorgefertigtes snmp-Plugin verwenden, das die ganze Arbeit für Sie erledigt.

Wenn Sie Ihr eigenes Speicherskript schreiben möchten, sollten Sie sicherstellen, dass Sie bei der Berechnung des verwendeten Speichers den zwischengespeicherten und den zwischengespeicherten Speicher berücksichtigen. Andernfalls werden falsche Daten erfasst.

Wenn Sie stattdessen ein snmp-Plugin verwenden möchten, das bereits alle erforderlichen Berechnungen für Sie durchführt, finden Sie hier einen Link zu einem, der recht gut funktioniert: checkMemoryviaSNMP .

Vorteile von SNMP:

Ich habe SNMP auf allen von mir überwachten Remote-Knoten installiert. Auf diese Weise kann ich alle meine Systeme von einem zentralen Server aus überwachen , ohne dass die Remote-Knoten kopiert oder mit einem Plug-In versehen werden müssen.

Nachteile von SNMP:

Sie müssen sicherstellen, dass der snmp-Agent auf jedem der Remote-Knoten installiert ist, auf denen Sie den Speicher überwachen möchten. Diese Installation ist jedoch ein einmaliger Vorgang. Wenn Sie Automatisierungstools wie Chefkoch, Marionette oder ähnliche Tools in Ihrer Umgebung verwenden, ist dies überhaupt kein Problem.

Konfiguration des SNMP-Agenten auf dem / den Remote-Knoten:

Nachdem der snmp-Agent installiert wurde, rufen Sie einfach die Datei /etc/snmpd/snmpd.conf auf und fügen Sie diese Zeile hinzu:

rocommunity  (specify-a-community-string-aka-password-here)

Starten Sie dann den snmpd-Agenten neu mit:

/etc/init.d/snmpd restart

Anschließend können Sie auf Ihrem zentralen Server, von dem aus Sie alle anderen Server überwachen, den folgenden Befehl ausführen:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
SimplisticSpeed
quelle